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

Nhóm MongoDB theo Chức năng

MongoDB nhóm theo rất hạn chế trong hầu hết các trường hợp, chẳng hạn như

- the result set must be lesser than 10000 keys.
- it will not work in sharded environments

Vì vậy, tốt hơn là sử dụng bản đồ giảm. vì vậy truy vấn sẽ như thế này

map =function () {allow ({a:true, b:true}, {count:1}); }

reduce = function(k, values) {
    var result = {count: 0};
    values.forEach(function(value) {
        result.count += value.count;
    });
    return result;
}

và sau đó

db.list.mapReduce(map,reduce,{out: { inline : 1}})

Nó là một phiên bản chưa được thử nghiệm. cho tôi biết nếu nó hoạt động

CHỈNH SỬA:

Chức năng bản đồ trước đó bị lỗi. Đó là lý do tại sao bạn không nhận được kết quả. lẽ ra nó phải là

map = function () {
    emit({a:this.a, b:this.b}, {count:1});
}

Dữ liệu thử nghiệm:

> db.multi_group.insert({a:1,b:2})
> db.multi_group.insert({a:2,b:2})
> db.multi_group.insert({a:3,b:2})
> db.multi_group.insert({a:1,b:2})
> db.multi_group.insert({a:3,b:2})
> db.multi_group.insert({a:7,b:2})


> db.multi_group.mapReduce(map,reduce,{out: { inline : 1}})
{
    "results" : [
        {
            "_id" : {
                "a" : 1,
                "b" : 2
            },
            "value" : {
                "count" : 2
            }
        },
        {
            "_id" : {
                "a" : 2,
                "b" : 2
            },
            "value" : {
                "count" : 1
            }
        },
        {
            "_id" : {
                "a" : 3,
                "b" : 2
            },
            "value" : {
                "count" : 2
            }
        },
        {
            "_id" : {
                "a" : 7,
                "b" : 2
            },
            "value" : {
                "count" : 1
            }
        }
    ],
    "timeMillis" : 1,
    "counts" : {
        "input" : 6,
        "emit" : 6,
        "reduce" : 2,
        "output" : 4
    },
    "ok" : 1,
}

EDIT2:

Giải pháp hoàn chỉnh bao gồm áp dụng có số lượng> =2

map = function () {
    emit({a:this.a, b:this.b}, {count:1,_id:this._id});
}

reduce = function(k, values) {
    var result = {count: 0,_id:[]};
    values.forEach(function(value) {
        result.count += value.count;
        result._id.push(value._id);
    });
    return result;
}

>db.multi_group.mapReduce(map,reduce,{out: { replace : "multi_result"}})

> db.multi_result.find({'value.count' : {$gte : 2}})
{ "_id" : { "a" : 1, "b" : 2 }, "value" : { "_id" : [   ObjectId("4f0adf2884025491024f994c"),   ObjectId("4f0adf3284025491024f994f") ], "count" : 2 } }
{ "_id" : { "a" : 3, "b" : 2 }, "value" : { "_id" : [   ObjectId("4f0adf3084025491024f994e"),   ObjectId("4f0adf3584025491024f9950") ], "count" : 2 } }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Plugin Munin Mongodb không hiển thị. . .?

  2. Lược đồ chưa được đăng ký cho mô hình. Mongodb> Mongoose

  3. Mongoose:Không thể tìm nạp tài liệu tệp từ bộ sưu tập .chunk mà không có trường dữ liệu

  4. Gắn Trang Blob dưới dạng VHD trong một tệp hàng loạt

  5. Khớp ít nhất N phần tử của mảng với danh sách các điều kiện