sql >> Database >  >> NoSQL >> MongoDB

overeenkomende velden intern in mongodb

Indien mogelijk raad ik u aan de voorwaarde in te stellen terwijl u de gegevens opslaat, zodat u een snelle waarheidscheck kunt doen (isInStudentsList ). Het zou supersnel zijn om dat soort zoekopdrachten uit te voeren.

Anders is er een relatief complexe manier om de Aggregation Framework-pijplijn te gebruiken om te doen wat u wilt in een enkele query:

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

Gegeven uw invoervoorbeeld zou de uitvoer zijn:

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

Een korte uitleg van de stappen:

  1. Bouw een projectie van het document met slechts studentId en een nieuw veld met een array die alleen de id . bevat (dus het eerste document zou [23, 55] bevatten .
  2. Met behulp van die structuur, $unwind . Dat creëert een nieuw tijdelijk document voor elk array-element in de studentIdComp reeks.
  3. Neem nu die documenten en maak een nieuwe documentprojectie, die nog steeds de studentId heeft en voegt een nieuw veld toe met de naam isStudentEqual die de gelijkheid van twee velden vergelijkt, de studentId en studentIdComp . Onthoud dat er op dit moment een enkel tijdelijk document is dat deze twee velden bevat.
  4. Controleer ten slotte of de vergelijkingswaarde isStudentEqual waar is en retourneer die documenten (die het originele document _id zullen bevatten en de studentId .
  5. Als de leerling meerdere keren in de lijst stond, moet je de resultaten mogelijk groeperen op studentId of _id om duplicaten te voorkomen (maar ik weet niet of je dat nodig hebt).


  1. PyMongo-transactiefout:transactienummers zijn alleen toegestaan ​​op een replicasetlid of mongo's

  2. MongoDB-verbinding instellen met Airflow

  3. Hoe gegevens in verschillende talen (niet Engels) op te slaan in MongoDB Field en dezelfde gegevens op te halen?

  4. mongodb invoegen mislukt vanwege socket-uitzondering