集計関数を実装するためのMongoDBクエリ
まず、ドキュメントを使用してコレクションを作成しましょう-
> db.demo121.insertOne(
... {
... "Id" : 101,
... "Details" : [
... {
... "SubjectId" : "1",
... "SubjectName" : "MongoDB",
... "Score" : 76
... },
... {
... "SubjectId" : "2",
... "SubjectName" : "MySQL",
... "Score" : 76
... },
... {
... "SubjectId" : "3",
... "SubjectName" : "Java",
... "Score" : 76
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2f1c60140daf4c2a3544b3")
} find()メソッドを使用してコレクションからすべてのドキュメントを表示する-
> db.demo121.find();
これにより、次の出力が生成されます-
{
"_id" : ObjectId("5e2f1c60140daf4c2a3544b3"), "Id" : 101, "Details" : [
{ "SubjectId" : "1", "SubjectName" : "MongoDB", "Score" : 76 },
{ "SubjectId" : "2", "SubjectName" : "MySQL", "Score" : 76 },
{ "SubjectId" : "3", "SubjectName" : "Java", "Score" : 76 }
]
} 以下は、集計関数を実装するためのクエリです-
> db.demo121.aggregate([
... { "$match": { "Id": 101 } },
... { "$unwind": "$Details" },
... {
... "$group": {
... "_id": "$Details.SubjectId",
... "count": { "$sum": 1 },
... "Details": {
... "$push": {
... "SubjectName": "$Details.SubjectName"
... }
... }
... }
... },
... {
... "$group": {
... "_id": null,
... "List": {
... "$push": {
... "SubId": "$_id",
... "Details": "$Details"
... }
... }
... }
... }
... ], function (err, out) {
... res.json(out);
... }); これにより、次の出力が生成されます-
{
"_id" : null, "List" : [
{ "SubId" : "3", "Details" : [ { "SubjectName" : "Java" } ] },
{ "SubId" : "2", "Details" : [ { "SubjectName" : "MySQL" } ] },
{ "SubId" : "1", "Details" : [ { "SubjectName" : "MongoDB" } ] }
]
} -
配列に$inを実装するMongoDBクエリ
ドキュメントを使用してコレクションを作成しましょう- > db.demo520.insertOne({"ListOfName":["John","Bob"]});{ "acknowledged" : true, "insertedId" : ObjectId("5e899fb4b3fbf26334ef6114") } > db.demo520.insertOne({"ListOfName":[
-
MongoDBアグリゲートに$matchと$projectを実装します
$ matchはドキュメントをフィルタリングして、指定された条件に一致するドキュメントのみを次のパイプラインステージに渡します。 $ projectは、要求されたフィールドを含むドキュメントをパイプラインの次のステージに渡します。 例を見て、ドキュメントを使用してコレクションを作成しましょう- > db.demo545.insert({Name:"Chris",details:{SubjectScore1:56,SubjectScore2:56}}) WriteResult({ "nInserted" : 1 }) > db.demo54