MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:Wie finde ich heraus, ob ein Array-Feld ein Element enthält?

[bearbeiten basierend darauf, dass dies jetzt in neueren Versionen möglich ist]

[Aktualisierte Antwort] Sie können den Namen der Klasse und die Schüler-ID nur dann auf folgende Weise abrufen, wenn sie bereits eingeschrieben sind.

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

und Sie erhalten das zurück, was Sie erwartet haben:

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

[Originale Antwort] Es ist derzeit nicht möglich, das zu tun, was Sie tun möchten. Dies ist bedauerlich, da Sie dies tun könnten, wenn der Schüler als Objekt im Array gespeichert wäre. Tatsächlich bin ich etwas überrascht, dass Sie nur ObjectId() verwenden, da dies immer der Fall sein wird verlangen, dass Sie die Studenten nachschlagen, wenn Sie eine Liste der Studenten anzeigen möchten, die in einem bestimmten Kurs eingeschrieben sind (suchen Sie zuerst die Liste der IDs und dann die Namen in der Studentensammlung nach - zwei Abfragen statt einer!)

Wenn Sie (als Beispiel) eine ID und einen Namen im Kursarray wie folgt speichern:

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

Ihre Abfrage wäre dann einfach:

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

Wenn dieser Student nur in CS 101 eingeschrieben wäre, würden Sie Folgendes zurückbekommen:

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