sql >> Database teknologi >  >> NoSQL >> MongoDB

matchende felter internt i mongodb

Hvis det er muligt, vil jeg foreslå, at du indstiller betingelsen, mens du gemmer dataene, så du kan foretage et hurtigt sandhedstjek (isInStudentsList ). Det ville være super hurtigt at lave den type forespørgsel.

Ellers er der en relativt kompleks måde at bruge Aggregation framework pipeline til at gøre, hvad du vil i en enkelt forespørgsel:

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

Givet dit input eksempel ville outputtet være:

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

En kort forklaring af trinene:

  1. Byg en projektion af dokumentet med kun studentId og et nyt felt med et array, der kun indeholder id (så det første dokument ville indeholde [23, 55] .
  2. Ved at bruge denne struktur, $unwind . Det opretter et nyt midlertidigt dokument for hvert array-element i studentIdComp array.
  3. Tag nu disse dokumenter, og opret en ny dokumentprojektion, som fortsat har studentId og tilføjer et nyt felt kaldet isStudentEqual der sammenligner ligheden mellem to felter, studentId og studentIdComp . Husk, at der på dette tidspunkt er et enkelt midlertidigt dokument, der indeholder disse to felter.
  4. Tjek endelig, at sammenligningsværdien isStudentEqual er sand og returnerer disse dokumenter (som vil indeholde det originale dokument _id og studentId .
  5. Hvis eleven var på listen flere gange, skal du muligvis gruppere resultaterne på studentId eller _id for at forhindre dubletter (men jeg ved ikke, at du har brug for det).


  1. Hvordan får du adgang til attributter for et objekt, der forespørges fra Mongo i Meteor

  2. Forespørger om indlejrede objektarrays

  3. Byg denne LEFT() SQL i MongoDB-forespørgsel?

  4. Lagring af datastrøm fra POST-anmodning i GridFS, express, mongoDB, node.js