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

Làm thế nào để nhóm và chọn tài liệu tương ứng với tối đa trong mỗi nhóm trong MongoDB?

Bạn có thể sử dụng $redact giai đoạn để thực hiện điều này. Nó tránh việc sử dụng $sort và sau đó thực hiện lại $group hoặc $unwind .

  • $group bởi _id và nhận được max_num_sold tối đa cho mỗi nhóm, tích lũy tất cả các tài liệu trong nhóm bằng cách sử dụng $push toán tử.
  • $redact thành các tài liệu phụ cho mỗi nhóm, chỉ giữ những tài liệu có max_num_sold trong num_sold của họ

mã mẫu:

db.getCollection('sales').aggregate([
{$group:{"_id":"$hash",
         "max_num_sold":{$max:"$num_sold"},
         "records":{$push:"$$ROOT"}}},
{$redact:{$cond:[{$eq:[{$ifNull:["$num_sold","$$ROOT.max_num_sold"]},
                       "$$ROOT.max_num_sold"]},
                "$$DESCEND","$$PRUNE"]}},
])

dữ liệu thử nghiệm:

db.getCollection('sales').insert([
{"title":"Foo","hash":17,"num_sold":49,"place":"ABC"},
{"title":"Bar","hash":18,"num_sold":55,"place":"CDF"},
{"title":"Baz","hash":17,"num_sold":55,"place":"JKN"},
{"title":"Spam","hash":17,"num_sold":20,"place":"ZSD"},
{"title":"Eggs","hash":18,"num_sold":20,"place":"ZDF"}
])

kết quả kiểm tra:

{
        "_id" : 18,
        "max_num_sold" : 55,
        "records" : [
                {
                        "_id" : ObjectId("567874f2b506fc2193a22696"),
                        "title" : "Bar",
                        "hash" : 18,
                        "num_sold" : 55,
                        "place" : "CDF"
                }
        ]
}
{
        "_id" : 17,
        "max_num_sold" : 55,
        "records" : [
                {
                        "_id" : ObjectId("567874f2b506fc2193a22697"),
                        "title" : "Baz",
                        "hash" : 17,
                        "num_sold" : 55,
                        "place" : "JKN"
                }
        ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ưu và nhược điểm của DynamoDB so với các cơ sở dữ liệu NoSQL khác là gì?

  2. Làm thế nào để Tìm bản ghi phù hợp trong mongodb?

  3. Tổng hợp kết quả MongoDB theo ngày ObjectId

  4. Nối mục vào mảng tài liệu MongoDB trong PyMongo mà không cần chèn lại

  5. Tương đương với mongo out:giảm tùy chọn trong hadoop