Я использую этот запрос для запроса значений 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]
];
Но где мне тогда указать требуемое значение?
Спасибо!
Создайте переменную для хранения функции 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
оператор вернуть документы с _id
s 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);
}
?>
Других решений пока нет …