MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Като се има предвид списък с идентификатори, кой е най-добрият начин да направите заявка кои идентификатори не съществуват в колекцията?

Предполагам, че имате следните документи в колекцията си:

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

и следния списък с id

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

Можем да използваме .filter метод за връщане на масива от ids това не е във вашата колекция.

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

Това дава

[ 7, 9, 8, 35 ] 

Сега можете да използвате и рамките за агрегиране и $setDifference оператор.

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

Това дава:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. реплика Задайте mongo docker-compose

  2. Съвкупността на MongoDB попълва липсващите дни

  3. 5 начина за вмъкване на документи в MongoDB

  4. Как да обобщим по година-месец-ден в различна часова зона

  5. Как да изберете поддокументи с MongoDB