ドキュメント全体の配列内のオブジェクトの個々のプロパティを合計するMongoDB集計
これには、MongoDBでaggregate()を使用します。まず、ドキュメントを使用してコレクションを作成しましょう-
> db.demo131.insertOne( ... { ... "_id": 101, ... "Details": [ ... { ... "PlayerScore": 500, ... "PlayerName": "Chris" ... }, ... { ... "PlayerScore": 400, ... "PlayerName": "David" ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : 101 } > db.demo131.insertOne( ... { ... "_id": 102, ... "Details": [ ... { ... "PlayerScore": 600, ... "PlayerName": "Chris" ... }, ... { ... "PlayerScore": 200, ... "PlayerName": "David" ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : 102 }
find()メソッドを使用してコレクションからすべてのドキュメントを表示する-
> db.demo131.find();
これにより、次の出力が生成されます-
{ "_id" : 101, "Details" : [ { "PlayerScore" : 500, "PlayerName" : "Chris" }, { "PlayerScore" : 400, "PlayerName" : "David" } ] } { "_id" : 102, "Details" : [ { "PlayerScore" : 600, "PlayerName" : "Chris" }, { "PlayerScore" : 200, "PlayerName" : "David" } ] }
以下は、配列内のオブジェクトの個々のプロパティを合計するためのクエリです-
> db.demo131.aggregate([ ... { $unwind: "$Details" }, ... { ... $group: { ... _id:"$Details.PlayerName", ... Value:{$sum:"$Details.PlayerScore"} ... } ... }, ... { ... $group: { ... _id: 0, ... Details:{ $push: {Details:"$_id",Value:"$Value"}} ... } ... }, ... { ... $project:{Details:1,_id:0} ... } ])
これにより、次の出力が生成されます-
{ "Details" : [ { "Details" : "David", "Value" : 600 }, { "Details" : "Chris", "Value" : 1100 } ] }
-
MongoDBの配列に基づいてドキュメントをフィルタリングする方法は?
配列に基づいてドキュメントをフィルタリングするには、$elemMatchを使用します。 $ elemMatch演算子は、配列フィールドを含むドキュメントと一致します。 ドキュメントを使用してコレクションを作成しましょう- > db.demo453.insertOne( ... { _id: 101, details: [ { Name: "David", Marks: 60 }, { Name: "Mike", Marks: 55} ] } ... ) { "acknowledged" : true, "inserte
-
インデックスNの配列オブジェクトを更新するMongoDBクエリ?
MongoDBのupdate()を使用して、配列オブジェクトを更新します。ドット表記の使用も必要です。ドキュメントを使用してコレクションを作成しましょう- > db.demo489.insertOne( ... { ... ... ... details : [{ ... id : 101, ... "Info1" : { ... "StudentName" : "