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

Cách thực hiện nhóm mongo trên máy chủ Meteor

Kể từ Meteor v1.0.4:

Vì vậy, bạn có thể gọi collection.rawCollection() để lấy đối tượng thu thập cơ bản:

var rawCollection = Orders.rawCollection();

rawCollection này có một phương thức group tương đương với nhóm group trong MongoDB shell. Tuy nhiên, API nút cơ bản là không đồng bộ, vì vậy bạn sẽ muốn chuyển đổi nó thành một hàm đồng bộ bằng cách nào đó. Chúng tôi không thể sử dụng Meteor.wrapAsync trực tiếp từ group nhận các đối số hàm không phải là lệnh gọi lại chính, vì vậy chúng tôi sẽ giải quyết vấn đề này bằng một wrapper:

function ordersGroup(/* arguments */) {
    var args = _.toArray(arguments);
    return Meteor.wrapAsync(function (callback) {
        rawCollection.group.apply(rawCollection, args.concat([callback]));
    })();
}

Bên trong phương thức của mình, bạn có thể gọi ordersGroup như bạn muốn db.orders.group trong vỏ Mongo. Tuy nhiên, các đối số được truyền riêng rẽ, thay vì trong một đối tượng:

ordersGroup(keys, condition, initial, reduce[, finalize[, command[, options]]])

Để biết thêm thông tin, hãy xem tài liệu này (mặc dù lưu ý rằng callback nên bỏ qua tham số, vì gói không đồng bộ của chúng tôi sẽ xử lý điều đó).

Vì vậy, bạn sẽ phải chuyển chúng vào một cách riêng biệt:

var result = ordersGroup(
    // keys
    function(doc) {
        return { year: doc.createdAt.toISOString().substring(0, 4) };
    },

    // condition
    {createdAt: {$lt: new Date("2015-12-31"), $gt: new Date("2015-01-01")}},

    // initial
    {months: {}},

    // reduce
    function(order, result) {
        var month = order.createdAt.getMonth()+1,
            date = order.createdAt.getDate();

        month = result.months[month] || (result.months[month] = {});
        date = month[date] || (month[date] = []);
        date.push(order);
    }
);

Tất nhiên, điều này chỉ hoạt động trên máy chủ, vì vậy hãy đảm bảo rằng phương thức của bạn ở mã chỉ dành cho máy chủ (tốt nhất là trong server thư mục con hoặc bên trong if (Meteor.isServer) ).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. PostgreSQL và MongoDB Ở đâu trong điều kiện

  2. Trả lại giá trị thực cuối cùng cho mỗi nhóm

  3. Ns không hợp lệ khi kết nối với máy chủ mongodb

  4. Truy vấn MongoDB với giá trị null

  5. Nhận tên của tất cả các khóa trong bộ sưu tập