sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Jak zjistit, zda pole pole obsahuje prvek?

[upravit na základě toho je to nyní možné v posledních verzích]

[Aktualizovaná odpověď] Můžete se dotázat následujícím způsobem, jak získat zpět název třídy a ID studenta, pouze pokud jsou již zapsáni.

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

a dostanete zpět to, co jste očekávali:

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

[Původní odpověď] V současné době není možné dělat to, co chcete. To je nešťastné, protože byste to mohli udělat, pokud by byl student uložen v poli jako objekt. Ve skutečnosti jsem trochu překvapen, že používáte pouze ObjectId(), protože to bude vždy vyžadovat, abyste vyhledali studenty, pokud chcete zobrazit seznam studentů zapsaných v konkrétním kurzu (nejprve vyhledejte seznam ID a poté vyhledejte jména ve sbírce studentů – dva dotazy místo jednoho!)

Pokud jste ukládali (jako příklad) ID a jméno v poli kurzu takto:

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

Váš dotaz by pak byl jednoduše:

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

Pokud by tento student byl zapsán pouze do CS 101, dostanete zpět:

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


  1. Jak promítnout index pole po rozvinutí pole pomocí agregačního rámce MongoDB

  2. umístění na žebříčku v mongo s okolními hráči

  3. Co je Hadoop Mapper Class v MapReduce?

  4. Oblast oznámení a zpráv pomocí Redis