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

Mongoose / MongoDB:đếm các phần tử trong mảng

Aha, tôi đã tìm ra giải pháp. Tổng hợp aggregate framework cho phép chúng ta thực thi một loạt các tác vụ trên một tập hợp. Đặc biệt lưu ý là $unwind , chia một mảng trong tài liệu thành tài liệu duy nhất , vì vậy chúng có thể là nhóm / được tính en masse .

MongooseJS hiển thị điều này rất dễ tiếp cận trên một mô hình. Sử dụng ví dụ trên, điều này trông như sau:

Thing.aggregate([
    { $match: { /* Query can go here, if you want to filter results. */ } } 
  , { $project: { tokens: 1 } } /* select the tokens field as something we want to "send" to the next command in the chain */
  , { $unwind: '$tokens' } /* this converts arrays into unique documents for counting */
  , { $group: { /* execute 'grouping' */
          _id: { token: '$tokens' } /* using the 'token' value as the _id */
        , count: { $sum: 1 } /* create a sum value */
      }
    }
], function(err, topTopics) {
  console.log(topTopics);
  // [ foo: 4, bar: 2 baz: 2 ]
});

Nó nhanh hơn đáng kể so với MapReduce trong các thử nghiệm sơ bộ trên ~ 200.000 bản ghi và do đó có khả năng mở rộng quy mô tốt hơn, nhưng điều này chỉ xảy ra sau một cái nhìn lướt qua. YMMV.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. BadValue Không hợp lệ hoặc không có ngôn ngữ người dùng được đặt. Hãy đảm bảo các biến môi trường LANG và / hoặc LC_ * được đặt chính xác

  2. Trong mongodb-go-driver, cách điều khiển / bỏ quản lý BSON vào một cấu trúc

  3. Tìm hiểu về Node / Mongo

  4. Lọc các phần tử mảng với $ regex

  5. Tôi có thể định cấu hình MongoDB thành Trong bộ nhớ không?