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

Làm cách nào để tìm giao điểm tập hợp của các tập hợp giữa các tài liệu trong một tập hợp duy nhất trong MongoDB?

Sử dụng khung tổng hợp để có được kết quả mong muốn. Tổng hợp toán tử tập hợp điều đó sẽ làm nên điều kỳ diệu là $setIntersection .

Quy trình tổng hợp sau đây đạt được những gì bạn đang có:

db.test.aggregate([
    {
        "$match": {
            "_id": { "$in": [1, 3] }
        }
    },
    {
        "$group": {
            "_id": 0,
            "set1": { "$first": "$set" },
            "set2": { "$last": "$set" }
        }
    },
    {
        "$project": { 
            "set1": 1, 
            "set2": 1, 
            "commonToBoth": { "$setIntersection": [ "$set1", "$set2" ] }, 
            "_id": 0 
        }
    }
])

Đầu ra :

/* 0 */
{
    "result" : [ 
        {
            "set1" : [1,2,3,4,5],
            "set2" : [1,2,5,10,22],
            "commonToBoth" : [1,2,5]
        }
    ],
    "ok" : 1
}

CẬP NHẬT

Để ba hoặc nhiều tài liệu được giao nhau, bạn cần $reduce toán tử để làm phẳng các mảng. Điều này sẽ cho phép bạn cắt bất kỳ số lượng mảng nào, vì vậy thay vì chỉ thực hiện giao nhau của hai mảng từ tài liệu 1 và 3, điều này cũng sẽ áp dụng cho nhiều mảng.

Xem xét chạy hoạt động tổng hợp sau:

db.test.aggregate([
    { "$match": { "_id": { "$in": [1, 3] } } },
    {
        "$group": {
            "_id": 0,
            "sets": { "$push": "$set" },
            "initialSet": { "$first": "$set" }
        }
    },
    {
        "$project": {
            "commonSets": {
                "$reduce": {
                    "input": "$sets",
                    "initialValue": "$initialSet",
                    "in": { "$setIntersection": ["$$value", "$$this"] }
                }
            }
        }
    }
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chỉ mục trên trường ts trong oplog.rs không được cập nhật

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

  3. TypeError:db.collection không phải là một hàm

  4. 6 cách để có được cả năm từ một ngày trong MongoDB

  5. Mongoose tìm / cập nhật tài liệu phụ