2013-10-07 4 views
0

У меня есть что-то вроде этого.MongoDB, выберите все записи, где внутренний счетчик данных больше нуля

{ 
    "title" : "", 
    "source" : { 
     "object" : "some", 
     "group" : "some 
     "data" : [] 
    } 
} 

"source.data" или "source" может быть вообще не определено.

Итак, теперь мне нужно выбрать все объекты с подсчетом (xxx.source.data)> 0. Как я могу выполнить этот запрос? Я ищу count() и xxx.length (method \ property), но все еще не могу понять, как их использовать в моем случае.

Добавлено:

.find({"source.data": {$exists: true, $size: {$gt: 1}}}) 

ответ

3

Вы можете сделать это следующим образом:

db.myObject.find({$and:[{"source.data":{$exists:true}},{"source.data":{$not:{$size:0}}}]}) 

Из документации MongoDB, он говорит $size оператор не принимает запросы диапазона.

$ size не принимает диапазоны значений. Чтобы выбрать документы на основе полей с разными номерами элементов, создайте поле счетчика, которое вы увеличиваете при добавлении элементов в поле.

Для получения дополнительных запросов вы можете использовать индекс списка. Вы можете использовать следующий запрос, чтобы найти документы с размером данных> 10.

db.myObject.find({$and:[{"source.data":{$exists:true}},{"source.data.10" : {$exists:true}}]}) 
+0

Не работает, если «источник» или «источник.данные» не определены. (PS: Редактированное верхнее сообщение.) – user1954544

+0

Я попробовал это. (добавлено в начало) Итак, проверьте наличие, но не выберите «размер больше», где могут возникнуть проблемы? – user1954544

+0

У меня есть обновленный запрос. Попробуй это. Он проверяет существование и размер массива данных. –

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