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

MongoDBのサブドキュメントのすべてのフィールドを合計するにはどうすればよいですか?

    あなたは任意のフィールド名を持つという古典的な間違いを犯しました。 MongoDBは「スキーマフリー」ですが、スキーマについて考える必要がないという意味ではありません。キー名はわかりやすいものにする必要があります。あなたの場合は、 「S2」は実際には何の意味もありません。ほとんどの種類のクエリと操作を実行するには、次のようにデータを保存するようにスキーマを再設計する必要があります。

    _id:...
    Segment:[
        { field: "S1", value: 1 },
        { field: "S2", value: 5 },
        { field: "Sn", value: 10 },
    ]
    

    次に、次のようにクエリを実行できます:

    db.collection.aggregate( [
        { $unwind: "$Segment" },
        { $group: {
            _id: '$_id', 
            sum: { $sum: '$Segment.value' } 
        } } 
    ] );
    

    その結果、次のようになります(質問からの唯一のドキュメントを使用):

    {
        "result" : [
            {
                "_id" : ObjectId("51e4772e13573be11ac2ca6f"),
                "sum" : 16
            }
        ],
        "ok" : 1
    }
    


    1. モンゴフィールドAがフィールドBより大きい

    2. モジュールソケットが見つかりませんlua

    3. MongoDBアグリゲート、グループパイプラインの配列の各要素をaddToSetする方法

    4. RedisサーバーのCPU使用率を改善するにはどうすればよいですか?