MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Đưa ra một danh sách các id, cách tốt nhất để truy vấn những id nào không tồn tại trong bộ sưu tập là gì?

Tôi cho rằng bạn có các tài liệu sau trong bộ sưu tập của mình:

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

và danh sách id sau

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

Chúng tôi có thể sử dụng .filter phương thức trả về mảng id cái đó không có trong bộ sưu tập của bạn.

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

Điều này mang lại

[ 7, 9, 8, 35 ] 

Giờ đây, bạn cũng có thể sử dụng khuôn khổ tổng hợp $setDifference nhà điều hành.

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

Điều này dẫn đến:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Truy vấn chiếu

  2. MongoDB:Hiệu suất giảm bản đồ khủng khiếp

  3. Làm cách nào tôi có thể sử dụng các tweet từ api phát trực tuyến của Twitter và lưu trữ chúng trong mongodb

  4. MongoDB Không tìm thấy thư mục dữ liệu / data / db

  5. Tìm bản ghi trùng lặp trong MongoDB