我第一次学习MongoDB,并且对使用多个参数编写查询感到有些困惑。
考虑以下临时收集
$col = (new MongoClient())->selectDB('tmpDB')->selectCollection('tmpCol');
$colors = ['red', 'blue', 'green', 'yellow', 'pink', 'orange', 'purple', 'gray'];
$objects = ['lamps', 'flowers', 'balloons', 'french horns', 'gables', 'slips', 'flamingos', 'streets'];
for ($i=0; $i < 100; ++$i) {
$collection->insert([
'count' => mt_rand(1, 99),
'color' => $colors[mt_rand(0, count($colors)-1)],
'object' => $objects[mt_rand(0, count($objects)-1)],
]);
}
我想编写一个查询,找到带有红色气球的所有文档。我已经阅读了MongoDB核心文档,并提出了两个问题:
$col->count(['color' => 'red', 'object' => 'balloons']);
或
$col->count(['$and' => [['color' => 'red'], ['object' => 'balloons']]]);
两个查询似乎都有效。承认我的数据集相当小,两个查询在大致相同的时间内返回正确的结果。我不确定我是否遗漏了这些差异,或者这些陈述是否真的相同?什么是最佳做法?
答案 0 :(得分:2)
在你的情况下,它们是等价的。最高级别的$and
是隐含的。有关其意图使用的示例,请参阅文档:cloud foundry log docs。
答案 1 :(得分:1)
$and
和,
分隔的字段列表之间存在细微差别。
MongoDB提供隐式和所有以,
分隔的字段。如果您希望在查询中多次使用相同的字段,则使用显式$and
。