Poprosiłem o to jako komentarz do pytania another, a także opublikowałem question na mongodb-user. Brak odpowiedzi do tej pory, więc uciekam się do zadawania osobnego pytania.Kwerenda zagnieżdżonych zapytań MongoDB
W documentation stany:
Jeśli pole posiada tablicę, a następnie $ w operator wybiera dokumenty których pole trzyma tablicę, która zawiera co najmniej jeden element, który odpowiada wartości w określonej tablicy (np itp)
Używam:
mongod --version:
db version v2.2.2, pdfile version 4.5
Thu May 30 12:19:12 git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
mongo --version:
MongoDB shell version: 2.0.4
W MongoDB skorupy:
db.nested.insert({'level1': {'level2': [['item00', 'item01'], ['item10', 'item11']]}})
Oto lista pytań, które powinny działać zgodnie z dokumentacją, a wyniki, które produkują:
Dlaczego to nie działa?
> db.nested.findOne({'level1.level2.0': 'item00'})
null
Dlaczego potrzebuję $ all?
> db.nested.findOne({'level1.level2.0': {'$all': ['item00']}})
{
"_id" : ObjectId("51a7a4c0909dfd8872f52ed7"),
"level1" : {
"level2" : [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
]
}
}
Powinien działać co najmniej jeden z poniższych elementów, prawda?
> db.nested.findOne({'level1.level2.0': {'$in': ['item00']}})
null
> db.nested.findOne({'level1.level2': {'$in': ['item00']}})
null
Jakieś pomysły? Rozważamy rezygnację z MongoDB, jeśli składnia zapytań nie działa zgodnie z reklamą.
Dzięki!
Dziękujemy za poświęcenie czasu na odpowiedź, ale niestety żadna z twoich odpowiedzi nie jest poprawna. Na stronie "Przeczytaj" podręcznika wyszukaj "Następująca operacja zwraca kursor do wszystkich dokumentów w kolekcji biosu, w której w polu tablicy zawiera element" UNIX ":" W odnośniku do dokumentacji w górnej części mojego pytania, możesz zobaczyć, że $ in powinno działać na polach zawierających tablice. Na koniec stwierdzenie "$ all działa, ponieważ ..." jest błędne: nie wszystkie wartości w polu muszą istnieć w zapytaniu, ale wszystkie wartości w zapytaniu muszą istnieć w polu dokumentu. – dgorur
Dzięki za poprawkę w "$ wszystko działa, ponieważ ...". Więc mówisz, że $ in powinno działać dla tablic i dokumentacja tak mówi. Teraz jestem zaintrygowany. Zrobię kilka eksperymentów i zobaczę, czy się dowiem. Masz tutaj bardzo interesujące pytanie! – AntonioOtero
Moje odkrycia przedstawiłem w innej odpowiedzi, mam nadzieję, że ci się przyda. – AntonioOtero