Запрос наличия вложенного списка в Mongo - PullRequest
7 голосов
/ 21 декабря 2011

У меня есть документ в Монго, который структурирован следующим образом:

{ 
    "_id" : ObjectId("4eea7237d0ba3a04f20008fb"), 
    "code" : "b2677c2809c844cc9d7e3e4ff8d95b46", 
    "city_id" : 4, 
    "datetime" : ISODate("2011-12-13T18:41:44.062Z"), 
    "plays" : [     
        {   
          "play_id" : 717224,   
          "clicks" : [ ],   
          "order" : 1,  
          "mysql_id" : 145
        }

Я хочу запросить документы, у которых атрибут plays.clicks является непустым списком. Я пытался существует без удачи. Я думал, что что-то вроде этого может работать:

 db.collection.find({plays.clicks.0: {$exists:true}})

Но я считаю, что это вернуло бы только документы, первый элемент которых в массиве plays содержит непустой список кликов.

Есть мысли о том, как мне это сделать?

Спасибо

Ответы [ 3 ]

8 голосов
/ 21 декабря 2011

db.collection.find({plays.clicks.0: {$exists:true}})

- правильный синтаксис, однако, поскольку plays - это список, запрос будет соответствовать любому документу , который имеет клики в plays.Таким способом нет способа получить подмножество массива для подэлементов [1].Есть билет для суб / виртуальных коллекций [2]

[1] http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements

[2] https://jira.mongodb.org/browse/SERVER-828

3 голосов
/ 21 декабря 2011

Сохранить размер списка как отдельный атрибут (например, num_plays). Затем вы можете запросить документы, у которых num_plays больше 0:

0 голосов
/ 21 декабря 2011

Не проверял, но я думаю, что вам нужен запрос

{ "plays.clicks" : { "$size" : 0 } }

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...