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

Mongodb nhận tổ hợp cuối cùng trong khuôn khổ tổng hợp

Những gì bạn cần ở đây là một giá trị "khóa duy nhất" được tạo cho mỗi tổ hợp "người gửi và người nhận". Nếu bạn muốn làm điều này một cách thường xuyên thì tôi khuyên bạn nên lưu trữ giá trị trong tài liệu. Nhưng đây là một cách bạn có thể thoát khỏi vấn đề bằng cách sử dụng khung tổng hợp:

 db.messages.aggregate([
    { "$project": {
       "combined": { "$map": {
           "input": { "$literal": ["A","B"] },
           "as": "bin",
           "in": { "$cond": [ 
               { "$eq": [ "$$bin", "A" ] },
               "$sender",
               "$recipient"
           ]}
       }},
       "doc": "$$ROOT"
    }},
    { "$unwind": "$combined" },
    { "$sort": { "_id": 1, "combined": 1, "doc.date": -1 } },
    { "$group": {
        "_id": "$_id",
        "combined": { "$push": "$combined" },
        "doc": { "$first": "$doc" }
    }},
    { "$group": {
        "_id": "$combined",
        "doc": { "$first": "$doc" }
    }}
])

Điều đó thu hẹp mẫu của bạn thành 3 kết hợp "duy nhất" trên "người gửi / người nhận" và trả về tài liệu cuối cùng trong cuộc hội thoại giữa "cặp" đó:

{
    "_id" : [
            "52f37fbaf9cd0e02773c97b1",
            "53172480f9cd0e682840b9f7"
    ],
    "doc" : {
            "_id" : "54b4cec9f6a48ce34f8b6429",
            "date" : NumberLong(1421135561),
            "sender" : "53172480f9cd0e682840b9f7",
            "recipient" : "52f37fbaf9cd0e02773c97b1",
            "isRead" : false,
            "text" : "Hello 2!"
    }
}
{
    "_id" : [
            "52f37fbaf9cd0e02773c97b1",
            "53072122f9cd0ee76306dc5a"
    ],
    "doc" : {
            "_id" : "54b4cf02f6a48ce54f8b62f9",
            "date" : NumberLong(1421135618),
            "sender" : "53072122f9cd0ee76306dc5a",
            "recipient" : "52f37fbaf9cd0e02773c97b1",
            "isRead" : false,
            "text" : "Hello 3!"
    }
}
{
    "_id" : [
            "52ea178ff9cd0e9f24d776b4",
            "52f37fbaf9cd0e02773c97b1"
    ],
    "doc" : {
            "_id" : "54b4d249f6a48ce54f8b6b9f",
            "date" : NumberLong(1421136457),
            "sender" : "52f37fbaf9cd0e02773c97b1",
            "recipient" : "52ea178ff9cd0e9f24d776b4",
            "isRead" : false,
            "text" : "Hello 4!"
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Truy cập trực tiếp MongoDB qua JavaScript

  2. Lưu trữ cây thư mục sâu trong cơ sở dữ liệu

  3. Slice với Projection với C #

  4. Sử dụng MongoDB $ pull để xóa tài liệu trong Mảng

  5. Cách chọn dữ liệu với điều kiện nhất định