MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann man bei einer Liste von IDs am besten abfragen, welche IDs nicht in der Sammlung vorhanden sind?

Ich nehme an, Sie haben die folgenden Dokumente in Ihrer Sammlung:

{ "_id" : ObjectId("55b725fd7279ca22edb618bb"), "id" : 1 }
{ "_id" : ObjectId("55b725fd7279ca22edb618bc"), "id" : 2 }
{ "_id" : ObjectId("55b725fd7279ca22edb618bd"), "id" : 3 }
{ "_id" : ObjectId("55b725fd7279ca22edb618be"), "id" : 4 }
{ "_id" : ObjectId("55b725fd7279ca22edb618bf"), "id" : 5 }
{ "_id" : ObjectId("55b725fd7279ca22edb618c0"), "id" : 6 }

und die folgende Liste von id

var listId = [ 1, 3, 7, 9, 8, 35 ];

Wir können den .filter verwenden -Methode, um das Array von ids zurückzugeben das ist nicht in deiner Sammlung.

var result = listId.filter(function(el){
    return db.collection.distinct('id').indexOf(el) == -1; });

Dies ergibt

[ 7, 9, 8, 35 ] 

Jetzt können Sie auch die Aggregations-Frameworks verwenden und die $setDifference Betreiber.

db.collection.aggregate([
   { "$group": { "_id": null, "ids": { "$addToSet": "$id" }}}, 
   { "$project" : { "missingIds": { "$setDifference": [ listId, "$ids" ]}, "_id": 0 }}
])

Dies ergibt:

{ "missingIds" : [ 7, 9, 8, 35 ] }