Как я могу запросить MongoDB из PHP с выражением IFNULL () внутри WHERE?

Я использую этот запрос для запроса значений NULL как «0»:

select * from myTable where IFNULL(field_id, 0) = 0

Как мне добиться того же в MongoDB с помощью PHP?

Мой код:

/**
* @var MongoDB
*/
$db = $this->getMongoDbHandler();

/**
* @var MongoCollection
*/
$coll = $db->selectCollection('myColl');

/**
* @var MongoCursor
*/
$cursor = $coll->find($where);

Как я должен сформировать $where массив?

Я думаю, я должен сделать что-то вроде:

$where['field_id'] = [
'$ifNull' => ['field_id', 0]
];

Но где мне тогда указать требуемое значение?

Спасибо!

1

Решение

Создайте переменную для хранения функции JavaScript, которая возвращает объединяющее выражение null. Вот несколько примеров тестовых документов, чтобы проверить это в оболочке Монго:

db.test.insert([
{ _id: 1, field_id: 0 },
{ _id: 2, test_field: 1 },
{ _id: 3, field_id: null },
{ _id: 4, field_id: 3 }
])

Я ожидаю, что мой запрос на поиск, который использует $where оператор вернуть документы с _ids 1,2 и 3, таким образом, вывод для запроса

db.test.find({ "$where": "function() { return (this.field_id || 0) == 0; }" })

было бы

/* 0 */
{
"_id" : 1,
"field_id" : 0
}

/* 1 */
{
"_id" : 2,
"test_field" : 1
}

/* 2 */
{
"_id" : 3,
"field_id" : null
}

Этот пример PHP демонстрирует, как искать коллекцию, используя код JavaScript, чтобы уменьшить набор результатов, используя ту же концепцию, описанную выше:

<?php

/**
* @var MongoDB
*/
$db = $this->getMongoDbHandler();

/**
* @var MongoCollection
*/
$coll = $db->selectCollection('myColl');

/**
* @var JavaScript code
*/
$js = "function() { return (this.field_id || 0) == 0; }" ;

/**
* @var MongoCursor
*/
$cursor = $coll->find(array('$where' => $js));

foreach ($cursor as $doc) {
var_dump($doc);
}

?>
1

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

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

По вопросам рекламы [email protected]