有的时候,我们知道MongoDB的查询json是什么样的,但是到PHP的数组中,就很容易写错了。

比如:$elemMatch这个查询操作符。


$elemMatch 数组查询操作用于查询数组值中至少有一个能完全匹配所有的查询条件的文档。语法格式如下:

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

限制

  • 不能指定 $where 查询条件在 $elemMatch 内;
  • 不能指定 $text 查询条件在 $elemMatch 内;

于是看到个示例:

db.user.find(
{Type: {"$in": ["local","google"]},
Alerts:{$elemMatch:{"Frequency.Type":"daily","IsActive":true}}
})

这个查询如何转为PHP的查询数组呢?

有个答案给了个思路,直接用

var_export(json_decode(
'{
"Type": {"$in": ["local","google"]},
"Alerts":{ "$elemMatch": {"Frequency.Type":"daily","IsActive":true}}
}',true));

就可以得到:

array (
'Type' => array ( '$in' => array ( 0 => 'local', 1 => 'google', ), ),
'Alerts' => array ( '$elemMatch' => array (
'Frequency.Type' => 'daily',
'IsActive' => true,
), ),
)

这就是查询数组的指令了。

相关参考:
elemMatch query does not work in php



Related Posts: PHP如何优雅的将MongoDB的查询转换为指令 :

留言