Как конвертировать ниже MongoDB запрос в PHP?

Ниже запрос отлично работал в Studio 3T и Robomongo, но я хочу преобразовать его в формат PHP,

Ниже мой запрос,

db.news.aggregate([
{
$match: {  "_id" : "1" }
},
{
"$project": {
"comments": {
"$filter": {
"input": "$comments",
"as": "comment",
"cond": { "$eq": [ "$$comment.status", "active" ] }
}
}
}
}, {
"$project": {
"comments": {
"$slice": [
{
"$slice": [
"$comments",
{
"$subtract": [ { "$size": [ "$comments" ] }, 1 ]
}
]
}, -1
]
}
}
}])

Я попробовал ниже, но это дало ошибкуError: localhost:27017: FieldPath field names may not be empty strings.«

PHP преобразованный пример:

<?php
$commentsAggregate=array(
array('$match' => array("_id" => "1")),
array('$project' => array(
"comments" => array(
'$filter' => array(
"input" => "$comments",
"as" => "comment",
"cond" =>  array('$eq' => array( "$$comment.status", 'active'))
)))),
array('$project' => array(
"comments" => array(
'$slice' => array(array(
'$slice' => array("$comments",array('$subtract' => array( array( '$size' => array("$comments")),1)))
), -1)
)))
);
$cursor=$collectionNews->aggregate($commentsAggregate);

Пожалуйста, помогите мне преобразовать вышеуказанный запрос.

0

Решение

Сообщение об ошибке «Имена полей FieldPath не могут быть пустыми строками» исходит из сервер. Глядя на приведенный вами пример PHP-кода, я замечаю, что вы непоследовательно используете одинарные и двойные кавычки. В частности, эти две строки выделяются:

  • "$$comment.status"
  • "$comment"

PHP оценивает ссылки на переменные внутри строк в двойных кавычках. Предполагая, что локальная область действия на самом деле не имеет $comment переменная определена, эти строки будут преобразованы в "$.status" а также ""соответственно. Как доказано в этот скрипт и вывод выполнения на 3v4l.org, эти примеры должны по крайней мере привести к уведомлению PHP о неопределенной переменной (моя локальная конфигурация PHP сообщает об этом на уровне «ошибки»). Если у вас нет записи этого сообщения об ошибке, я бы предложил следующее:

  • Проверьте свои error_reporting конфигурации.
  • В идеале вы должны сообщить обо всем (E_ALL) в среде разработки. Полный отчет также рекомендуется для производства, хотя там вы, вероятно, захотите отключить display_errors (для безопасности) и вместо этого убедитесь, что все зарегистрировано правильно.
  • Если выясняется ошибка было вошли, посмотрите, как это было пропущено при отладке этой проблемы.

Что касается исправления основной причины, вы должны учитывать строки в одинарных кавычках при написании запросов / команд MongoDB на PHP. Об этом есть примечание в MongoCollection::find() документация, но это не то, что мы повторяем на каждой странице, как PHP оценка строки в двойных кавычках находится вне контроля водителя.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector