sql >> Databasteknik >  >> NoSQL >> MongoDB

matchande fält internt i mongodb

Om möjligt skulle jag föreslå att du ställer in villkoret medan du lagrar data så att du kan göra en snabb sanningskontroll (isInStudentsList ). Det skulle gå supersnabbt att göra den typen av frågor.

Annars finns det ett relativt komplicerat sätt att använda Aggregation-ramverket för att göra vad du vill i en enda fråga:

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

Med ditt inmatningsexempel skulle utdata vara:

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

En kort förklaring av stegen:

  1. Skapa en projektion av dokumentet med bara studentId och ett nytt fält med en array som bara innehåller id (så det första dokumentet skulle innehålla [23, 55] .
  2. Med den strukturen, $unwind . Det skapar ett nytt temporärt dokument för varje arrayelement i studentIdComp array.
  3. Ta nu dessa dokument och skapa en ny dokumentprojektion, som fortsätter att ha studentId och lägger till ett nytt fält som heter isStudentEqual som jämför likheten mellan två fält, studentId och studentIdComp . Kom ihåg att det vid det här laget finns ett enda temporärt dokument som innehåller dessa två fält.
  4. Kontrollera slutligen att jämförelsevärdet isStudentEqual är sant och returnerar dessa dokument (som kommer att innehålla originaldokumentet _id och studentId .
  5. Om eleven fanns i listan flera gånger kan du behöva gruppera resultaten på studentId eller _id för att förhindra dubbletter (men jag vet inte att du skulle behöva det).


  1. HBase Clusters Data Synchronization med HashTable/SyncTable-verktyget

  2. Fulltextsökning på mongodb på ryska

  3. Ställ in lösenord till meteors mongodatabas

  4. Uppdatera element i array om det finns annat infoga nytt element i den arrayen i MongoDb