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

MeteorJSでのMongoDBの集計とグループ化の問題

    meteorhacksaggregate を使用している場合 .aggregate()を実装するパッケージ コレクションに対してコマンドを実行すると、応答として配列のみが返されます。したがって、それを公開されたコレクションの形式に変換する必要があります。

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

    または、 falseを含める 提案された出力がそれ自体を示唆していると見なされます:

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

    $ cond> 数値に変換するための評価。

    基本的な集計では、一致した結果を「合計」しているだけで、もちろん $ sort 出力に存在するフィールドを参照します。この例では、 _idにある「userId」値になります。 集計からのキーですが、必要に応じて合計カウントで並べ替える「カウント」にすることもできます。

    その部分は、 $ sortのようにエラーを生成していました は現在のフィールドであり、 $のフィールド値ではありません 表記。

    ただし、もちろん、クライアントがアクセス可能なコレクションとして公開するには、実際の _idを置き換える必要があります。 何かが期待されています。したがって、ランダムIDの生成は、他のフィールドの包含と同様に、ここで機能します。

    もう少し詳しく知りたい場合や、バニラインストールで機能する「ハック」パッケージの代わりに、この回答 例として完全なリストを持っている私自身による。




    1. 重複するMongoObjectIdが2つの異なるコレクションで生成される可能性はありますか?

    2. 流星生産サーバーでmongodbを復元する

    3. MongoDBBasicDBObjectとJavaのドキュメント

    4. Python辞書:u'文字を削除する