Обратные вызовы наиболее легко описаны в терминах телефонной системы. Вызов функции аналогичен вызову кого-то по телефону, задавая ей вопрос, получая ответ и подвешивая; добавление обратного вызова изменяет аналогию, поэтому, задав ей вопрос, вы также дадите ей свое имя и номер, чтобы она могла перезвонить вам с ответом.
- Пол Якубик, «Обратный звонок» Реализации в C ++ "
Начиная с версии 2.6, другой способ сделать это - сравнить поле с пустым массивом:
ME.find({pictures: {$gt: []}})
Тестирование его в оболочке:
> db.ME.insert([
{pictures: [1,2,3]},
{pictures: []},
{pictures: ['']},
{pictures: [0]},
{pictures: 1},
{foobar: 1}
])
> db.ME.find({pictures: {$gt: []}})
{ "_id": ObjectId("54d4d9ff96340090b6c1c4a7"), "pictures": [ 1, 2, 3 ] }
{ "_id": ObjectId("54d4d9ff96340090b6c1c4a9"), "pictures": [ "" ] }
{ "_id": ObjectId("54d4d9ff96340090b6c1c4aa"), "pictures": [ 0 ] }
Так он правильно включает документы, где pictures
имеет хотя бы один элемент массива, и исключает документы, где pictures
является либо пустым массивом, а не массивом, либо отсутствует.
ME.find({pictures: {$exists: true}})
Просто, это работало на меня.