sql >> データベース >  >> NoSQL >> MongoDB

Mongoose / MongoDB:配列内の要素をカウントします

    ああ、私は解決策を見つけました。 MongoDBのaggregate フレームワークを使用すると、コレクションに対して一連のタスクを実行できます。特に注目すべきは$unwind 、ドキュメント内の配列を一意のドキュメントに分割します 、グループにすることができる/まとめて数える

    MongooseJS これをモデル上で非常にアクセスしやすく公開します。上記の例を使用すると、これは次のようになります。

    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 ]
    });
    

    約200,000レコードにわたる予備テストでは、MapReduceよりも著しく高速であるため、スケーリングが向上する可能性がありますが、これはざっと見ただけです。 YMMV。




    1. mongoDBのfindAndModifyとupdateの違いは何ですか?

    2. mongod --bind_ip using docker-compose version 2

    3. MongoDBにアクセスする方法

    4. エクスプレスポストリクエストでのUnhandledPromiseRejectionWarningの解決