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

Chọn Max () với nhóm theo mongodb

Tôi đã tạo Bộ sưu tập Mongo như sau.

{ "_id" : ObjectId("4fb36bfd3d1c88bfa15103b1"), "name" : "bob", "value" : 5 }
{ "_id" : ObjectId("4fb36c033d1c88bfa15103b2"), "name" : "bob", "value" : 3 }
{ "_id" : ObjectId("4fb36c063d1c88bfa15103b3"), "name" : "bob", "value" : 7 }
{ "_id" : ObjectId("4fb36c0c3d1c88bfa15103b4"), "name" : "john", "value" : 2 }
{ "_id" : ObjectId("4fb36c103d1c88bfa15103b5"), "name" : "john", "value" : 4 }
{ "_id" : ObjectId("4fb36c143d1c88bfa15103b6"), "name" : "john", "value" : 8 }
{ "_id" : ObjectId("4fb36c163d1c88bfa15103b7"), "name" : "john", "value" : 6 }

Sau đó, bằng cách sử dụng mã sau, tôi nhóm nó theo tên của chúng và max (giá trị)

db.table1.group(
    {key: {name:true},
        reduce: function(obj,prev) { 
            if (prev.maxValue < obj.value) { 
                prev.maxValue = obj.value; 
            }  
        },
    initial: { maxValue: 0 }}
);

Kết quả được hiển thị dưới dạng

[
    {
        "name" : "bob",
        "maxValue" : 7
    },
    {
        "name" : "john",
        "maxValue" : 8
    }
]

Nó đơn giản hơn nhiều với khung tổng hợp. Bạn có thể nhận được kết quả tương tự với đoạn mã sau bằng cách sử dụng khung tổng hợp.

db.table1.aggregate([
    {
       $group:{_id:"$name", "maxValue": {$max:"$value"}}
    }
]);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB trên Android

  2. Cassandra và MongoDB

  3. Làm thế nào để dừng máy chủ mongodb trên Windows?

  4. Nguy cơ của việc xây dựng chỉ mục trên MongoDB

  5. MongoDB - Chỉ mục không được sử dụng khi sắp xếp và giới hạn trên truy vấn phạm vi