sql >> Databáze >  >> NoSQL >> MongoDB

Jaký je nejlepší způsob, jak zjistit, která ID v kolekci neexistují, když je uveden seznam ID?

Předpokládám, že máte ve sbírce následující dokumenty:

{ "_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 }

a následující seznam ids

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

Můžeme použít .filter metoda, která vrátí pole ids který není ve vaší sbírce.

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

Výsledkem je

[ 7, 9, 8, 35 ] 

Nyní můžete také používat agregační rámce a $setDifference operátor.

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

Výsledkem je:

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


  1. pipelining vs transakce v redis

  2. Mongo dotaz pomocí mongoidu v aplikaci rails způsobuje chybu časového limitu kurzoru

  3. Jak se zotavit z vrácení MongoDB?

  4. Jak z výsledků vyhledávání vyloučit dokumenty s poli, která nejsou přítomna v dotazu?