MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

異なるドキュメント内の同様のIDを持つ要素のMongoDB集約?


このようなドキュメントのグループ化には、MongoDBaggregate()で$groupを使用します。ドキュメントを使用してコレクションを作成しましょう-

> db.demo602.insertOne({id:1,Name:"Chris"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e960080ed011c280a0905c9")
}
> db.demo602.insertOne({id:2,Name:"David"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e960086ed011c280a0905ca")
}
> db.demo602.insertOne({id:1,Name:"Bob"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e96008ced011c280a0905cb")
}
> db.demo602.insertOne({id:3,Name:"Mike"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e960092ed011c280a0905cc")
}
> db.demo602.insertOne({id:2,Name:"John"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e960099ed011c280a0905cd")
}
> db.demo602.insertOne({id:1,Name:"Sam"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e9600a1ed011c280a0905ce")
}

find()メソッドを使用してコレクションからすべてのドキュメントを表示する-

> db.demo602.find();

これにより、次の出力が生成されます-

{ "_id" : ObjectId("5e960080ed011c280a0905c9"), "id" : 1, "Name" : "Chris" }
{ "_id" : ObjectId("5e960086ed011c280a0905ca"), "id" : 2, "Name" : "David" }
{ "_id" : ObjectId("5e96008ced011c280a0905cb"), "id" : 1, "Name" : "Bob" }
{ "_id" : ObjectId("5e960092ed011c280a0905cc"), "id" : 3, "Name" : "Mike" }
{ "_id" : ObjectId("5e960099ed011c280a0905cd"), "id" : 2, "Name" : "John" }
{ "_id" : ObjectId("5e9600a1ed011c280a0905ce"), "id" : 1, "Name" : "Sam" }

以下は、異なるドキュメント内の類似したIDを持つ要素を集約するためのクエリです-

> db.demo602.aggregate([
...    { $group: {
...       '_id': {id:"$id", "Name" : "$Name"},
...       "count" : { "$sum": 1 }
...    }},
...    { $group: {
...       '_id': "$_id.id",
...       "ListOfName" : {"$push" : {Name:"$_id.Name", Frequency: "$count"}}
...    }},
... ],
... {'allowDiskUse': true}
... );

これにより、次の出力が生成されます-

{ "_id" : 2, "ListOfName" : [
   { "Name" : "John", "Frequency" : 1 },
   { "Name" : "David", "Frequency" : 1 }
] }
{ "_id" : 3, "ListOfName" : [
   { "Name" : "Mike", "Frequency" : 1 }
] }
{ "_id" : 1, "ListOfName" : [
   { "Name" : "Sam", "Frequency" : 1 },
   { "Name" : "Bob", "Frequency" : 1 },
   { "Name" : "Chris", "Frequency" : 1 }
] }

  1. マークが最も少ない2つのドキュメントを取得するためのMongoDB集計

    ソートされたマークのリストを取得するには、$sortを使用します。 $ limit:2を使用します マークが最も少ないそのようなドキュメントを2つだけ表示します。ドキュメントを使用してコレクションを作成しましょう- > db.demo709.insertOne({Name:"John","Marks":75}); {    "acknowledged" : true,    "insertedId" : ObjectId("5ea839005d33e20ed

  2. MongoDB集計で複数のフィールドでカウント

    複数のフィールドでカウントするには、MongoDBで$facetを使用します。 $ facetは、同じ入力ドキュメントのセットの単一ステージ内で複数の集約パイプラインを処理します。ドキュメントを使用してコレクションを作成しましょう- > db.demo721.insertOne( ...    { ... ...       "details1": { ...          "id":101 ... ...