MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB:Как да разберете дали полето на масива съдържа елемент?

[редактиране въз основа на това, което сега е възможно в последните версии]

[Актуализиран отговор] Можете да направите заявка по следния начин, за да получите обратно името на класа и идентификатора на ученика само ако те вече са записани.

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

и ще получите обратно това, което сте очаквали:

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

[Оригинален отговор] Не е възможно да правите това, което искате да правите в момента. Това е жалко, защото бихте могли да направите това, ако ученикът е бил съхранен в масива като обект. Всъщност, малко съм изненадан, че използвате само ObjectId(), тъй като това винаги изискват от вас да потърсите студентите, ако искате да покажете списък със студенти, записани в конкретен курс (първо потърсете списъка с идентификатори, след което потърсете имена в колекцията на студентите – две заявки вместо една!)

Ако съхранявате (като пример) идентификатор и име в масива на курса по следния начин:

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

Тогава вашата заявка ще бъде просто:

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

Ако този ученик беше записан само в CS 101, ще получите обратно:

{ "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. Монго агрегиране Съвпадение на множество стойности

  2. Mongoexport, използващ $gt и $lt ограничения за период от време

  3. MongoDB Object.bsonSize()

  4. MongoDB по някакъв начин ограничен ли е до едно ядро?

  5. Mongo – Игнорирайте собствеността, за да не бъде запазена