2015-06-25 2 views
0

Я изучаю 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

Это имеет смысл. Спасибо. Если вы хотите добавить это как ответ, я могу отметить его принятым. –

ответ

1

Существует небольшая разница между $and и , разделенным списком полей. MongoDB предоставляет неявные и между всеми полями, разделенными ,. Явный $and используется, если вы хотите, чтобы одно и то же поле несколько раз в запросе.

Смежные вопросы