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

съвпадащи полета вътрешно в mongodb

Ако е възможно, предлагам да зададете условието, докато съхранявате данните, така че да можете да направите бърза проверка за истинност (isInStudentsList ). Би било супер бързо да направите такъв тип заявка.

В противен случай има сравнително сложен начин за използване на конвейера на рамката за агрегиране, за да направите това, което искате в една заявка:

db.students.aggregate( 
    {$project: 
        {studentId: 1, studentIdComp: "$students.id"}},  
    {$unwind: "$studentIdComp"}, 
    {$project : { studentId : 1, 
        isStudentEqual: { $eq : [ "$studentId", "$studentIdComp" ] }}}, 
    {$match: {isStudentEqual: true}})

Предвид вашия пример за въвеждане, изходът ще бъде:

{
    "result" : [
         {
             "_id" : ObjectId("517b88decd483543a8bdd95b"),
             "studentId" : 23,
             "isStudentEqual" : true
         }
    ],
    "ok" : 1
}

Кратко обяснение на стъпките:

  1. Изградете проекция на документа само с studentId и ново поле с масив, съдържащ само id (така че първият документ ще съдържа [23, 55] .
  2. Използвайки тази структура, $unwind . Това създава нов временен документ за всеки елемент от масива в studentIdComp масив.
  3. Сега вземете тези документи и създайте нова проекция на документ, която продължава да има studentId и добавя ново поле, наречено isStudentEqual който сравнява равенството на две полета, studentId и studentIdComp . Не забравяйте, че в този момент има един временен документ, който съдържа тези две полета.
  4. Накрая проверете дали сравнителната стойност isStudentEqual е вярно и връща тези документи (които ще съдържат оригиналния документ _id и studentId .
  5. Ако ученикът е бил в списъка няколко пъти, може да се наложи да групирате резултатите по studentId или _id за предотвратяване на дублиране (но не знам дали имате нужда от това).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Експортиране на MySQL в MongoDB

  2. Получете разположението на документа в колекция въз основа на реда на сортиране

  3. Mongodb $lookup в Spring data mongo

  4. PHP72 MongoDB драйвер с Homebrew на OSX

  5. Не може да се свърже с локална mongoDB от java