我使用此查询将NULL值查询为"0":
select * from myTable where IFNULL(field_id, 0) = 0
如何使用PHP在MongoDB中实现相同的功能?
我的代码:
/**
* @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]
];
但是,我在哪里指示所需的值?
谢谢!
创建一个变量来保存返回null合并表达式的JavaScript函数。以下是一些在mongoshell中测试此功能的示例测试文档:
db.test.insert([
{ _id: 1, field_id: 0 },
{ _id: 2, test_field: 1 },
{ _id: 3, field_id: null },
{ _id: 4, field_id: 3 }
])
我希望我的find查询使用$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);
}
?>