2012-07-24 19 views
24

Mam następującą strukturę dokumentu:Mongo db - Zapytania zagnieżdżone tablica i obiekty

{ 
    "_id":"12345", 
    "value":{ 
     "T":0, 
     "v":[ 
     { 
      "name":"JW", 
      "cost":100 
     } 
     ] 
    } 
} 

Jak mogę kwerendy nazwę klucza? Próbowałem notacji kropki, ale bez powodzenia (myślę, że to działa tylko dwa poziomy)

+0

Jeśli przez przypadek robiłeś _group by_, musisz użyć operacji '$ unwind' na kluczu' value.v' zanim będziesz mógł operować w polach 'name' /' cost'. –

Odpowiedz

29

Nie jest jasne, co dokładnie próbował, ale to powinno działać, aby znaleźć się wyżej doc przez name:

db.collection.find({ "value.v.name": "JW" }) 

Reference

+0

Dzięki, jestem pewien, że to nie działa dla mnie, może mam błędne zapytanie. –

+3

Nie sądzę, że można użyć operatora kropki w tablicy. –

+1

@ SamuelO'Malley Właśnie zaktualizowałem odnośnik, który lepiej pokazuje, że jest to obsługiwane przez tablice. – JohnnyHK

12

należy użyć $elemMatch operatora:

db.collection.find({ 
    'value.v': { 
     $elemMatch: { 
      name: 'JW', // "name == 'JW'" 
      cost : 100 //if you need "&& cost == 100" 
     } 
    } 
}); 

Mongo docs