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

Vấn đề về tổng hợp &nhóm MongoDB trong MeteorJS

Nếu bạn đang sử dụng tổng hợp sao băng gói để triển khai .aggregate() trên bộ sưu tập của bạn, sau đó nó sẽ chỉ trả về một mảng để phản hồi. Vì vậy, bạn cần biến nó thành một dạng tuyển tập đã xuất bản:

Meteor.publish("completedLB,function() {
    var self = this;

    var results = userCompleted.aggregate([
        { "$match": { "progressState": true } },
        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": "$progressState" },
             "count": { "$sum": 1 }
        }},
        { "$sort": { "_id": 1 } }
    ]);

    _.each(results,function(result) {
        self.added("client_collection_name",Random.id(), {
            userId: result._id,
            progressState: result.progressState,
            count: result.count
        });
    });
    self.ready();
});

Hoặc bao gồm false được tính là đầu ra được đề xuất của bạn tự gợi ý:

        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": true },
             "count": { "$sum": { "$cond": ["$progressState", 1,0] }
        }},
        { "$sort": { "_id": 1 } }

Là đường dẫn với $cond đánh giá để chuyển đổi thành số.

Trong tập hợp cơ bản, bạn chỉ "tính tổng" các kết quả phù hợp và tất nhiên là $sort đề cập đến một trường có trong đầu ra, theo ví dụ của bạn sẽ là giá trị "userId" bây giờ trong _id từ tổng hợp, nhưng cũng có thể là "đếm" để sắp xếp theo tổng số nếu muốn.

Phần đó đang tạo ra lỗi, là $sort là một trường hiện tại và không phải là một giá trị trường với $ ký hiệu.

Nhưng tất nhiên để xuất bản dưới dạng một bộ sưu tập có thể truy cập được từ ứng dụng khách, bạn cần phải thay thế _id thực tế với một cái gì đó được mong đợi. Vì vậy, việc tạo id ngẫu nhiên hoạt động ở đây, cũng như việc bao gồm các trường khác.

Để biết thêm một chút chi tiết, và cũng là một gói thay thế cho gói "hack" chỉ hoạt động với cài đặt vani, còn có câu trả lời này bản thân tôi có một danh sách đầy đủ làm ví dụ.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thiết lập lại kết nối bởi Peer pymongo

  2. mongodb $ trong giới hạn

  3. Cách trả lại dữ liệu từ MongoDB

  4. mongodb:truy vấn find () trong một bộ sưu tập

  5. Cách đẩy các mục mới vào một mảng bên trong một đối tượng