MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo Zapytanie w wielu polach poddokumentu

To właśnie $elemMatch operator jest przeznaczony, chociaż często jest niewłaściwie używany. Zasadniczo wykonuje warunki zapytania na każdym elemencie "w" tablicy. Wszystkie argumenty MongoDB są operacją "i", chyba że wyraźnie nazwano inaczej:

db.collection.find({ "arr": { "$elemMatch": { "name": "b", "num": 2  } } })

Prawdopodobnie również tutaj chcesz „zaprojektować”, jeśli oczekujesz tylko dopasowanego pola, a nie całego dokumentu:

db.collection.find(
    { "arr": { "$elemMatch": { "name": "b", "num": 2  } } },
    { "arr.$": 1 }
)

Na koniec, aby wyjaśnić, dlaczego druga próba nie działa, to zapytanie:

db.collection.find({
    "arr": [
        { "name": "b", "num": 2 }
    ]
})

Nie pasuje do niczego, ponieważ nie istnieje żaden dokument, w którym „arr” zawiera pojedynczy element dokładnie pasujący do twoich warunków.

Twój pierwszy przykład się nie powiódł...:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

Ponieważ istnieje kilka elementów tablicy, które spełniają warunki i nie uważa się, że oba warunki mają zastosowanie do tego samego elementu. To właśnie $elemMatch dodaje, a kiedy potrzebujesz więcej niż jednego warunku do spełnienia, to właśnie tutaj go używasz.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak naprawić zbyt wiele błędów otwartych plików podczas agregacji miliardów rekordów?

  2. Jak bezpieczny jest tryb bezpieczny MongoDB na wstawkach?

  3. Nie można uwierzytelnić użytkownika w MongoDB 3.0.2 przy użyciu połączenia java

  4. Symfony2 + Konieczność użycia wyrażenia regularnego w mongodb ODM doktryny, aby sprawdzić sprawdzanie niewrażliwe na wielkość liter

  5. Odpytywanie tego samego dokumentu równolegle w tym samym API w mongoDB