PHP中的MongoDB查询:为什么要使用$和?

时间:2015-06-25 16:19:03

标签: php mongodb

我第一次学习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']]]);

两个查询似乎都有效。承认我的数据集相当小,两个查询在大致相同的时间内返回正确的结果。我不确定我是否遗漏了这些差异,或者这些陈述是否真的相同?什么是最佳做法?

2 个答案:

答案 0 :(得分:2)

在你的情况下,它们是等价的。最高级别的$and是隐含的。有关其意图使用的示例,请参阅文档:cloud foundry log docs

答案 1 :(得分:1)

$and,分隔的字段列表之间存在细微差别。 MongoDB提供隐式和所有以,分隔的字段。如果您希望在查询中多次使用相同的字段,则使用显式$and