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

MongoDB:Jak sprawdzić, czy pole tablicy zawiera element?

[edytuj w oparciu o to, co jest teraz możliwe w najnowszych wersjach]

[Zaktualizowana odpowiedź] Możesz zapytać w następujący sposób, aby odzyskać nazwę klasy i identyfikator ucznia tylko wtedy, gdy są już zarejestrowani.

db.student.find({},
 {_id:0, name:1, students:{$elemMatch:{$eq:ObjectId("51780f796ec4051a536015cf")}}})

a otrzymasz to, czego się spodziewałeś:

{ "name" : "CS 101", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
{ "name" : "Literature" }
{ "name" : "Physics", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }

[Oryginalna odpowiedź] Obecnie nie można robić tego, co chcesz. Jest to niefortunne, ponieważ byłbyś w stanie to zrobić, gdyby uczeń był przechowywany w tablicy jako obiekt. W rzeczywistości jestem trochę zaskoczony, że używasz tylko ObjectId(), ponieważ to zawsze wymagają wyszukania uczniów, jeśli chcesz wyświetlić listę uczniów zapisanych na konkretny kurs (najpierw wyszukaj listę identyfikatorów, a następnie wyszukaj nazwiska w zbiorze uczniów - dwa zapytania zamiast jednego!)

Jeśli zapisałeś (jako przykład) identyfikator i nazwę w tablicy kursów w następujący sposób:

{
        "_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
        "name" : "Physics",
        "students" : [
                {id: ObjectId("51780f796ec4051a536015cf"), name: "John"},
                {id: ObjectId("51780f796ec4051a536015d0"), name: "Sam"}
        ]
}

Twoje zapytanie byłoby wtedy po prostu:

db.course.find( { }, 
                { students : 
                    { $elemMatch : 
                       { id : ObjectId("51780f796ec4051a536015d0"), 
                         name : "Sam" 
                       } 
                    } 
                } 
);

Gdyby ten uczeń był zapisany tylko do CS 101, wrócisz:

{ "name" : "Literature" }
{ "name" : "Physics" }
{
    "name" : "CS 101",
    "students" : [
        {
            "id" : ObjectId("51780f796ec4051a536015cf"),
            "name" : "John"
        }
    ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Automatyzacja sprawdzania konfiguracji bazy danych

  2. grupuj według zapytań dotyczących kolekcji meteor

  3. Utwórz indeks wieloznaczny w MongoDB

  4. Mongoose dodaje wiele obiektów do tablicy, jeśli nie istnieje na podstawie

  5. Sprawdź, czy upsert MongoDB wykonał insert lub aktualizację