MongoDB 查詢,用於篩選符合條件的所有元素都來自巢狀陣列的物件


為此,請使用 aggregate()。讓我們首先建立一個包含文件的集合 −

> db.demo418.insertOne(
...    {
...       "details":[
...          {
...             "CountryName":"US",
...             "Marks":45
...          },
...          {
...             "CountryName":"US",
...             "Marks":56
...          },
...
...       ],
...       "Name":"John"
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e724324b912067e57771ae6")
}
> db.demo418.insertOne(
...    {
...       "details":[
...          {
...             "CountryName":"US",
...             "Marks":78
...          },
...          {
...             "CountryName":"UK",
...             "Marks":97
...          },
...
...       ],
...       "Name":"Mike"
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e724325b912067e57771ae7")
}

藉助 find() 方法,顯示集合中的所有文件 −

> db.demo418.find();

這將產生以下輸出 −

{ "_id" : ObjectId("5e724324b912067e57771ae6"), "details" : [ { "CountryName" : "US", "Marks" : 45 }, { "CountryName" : "US", "Marks" : 56 } ], "Name" : "John" }
{ "_id" : ObjectId("5e724325b912067e57771ae7"), "details" : [ { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 97 } ], "Name" : "Mike" }

以下是用查詢來篩選符合條件的所有元素都來自巢狀陣列的物件 −

> db.demo418.aggregate([
...    {$unwind:"$details"},
...    { $group: {
...       _id: '$_id',
...       details : { $first: '$details' },
...       alldetails: { $sum: 1 },
...       alldetailsmatch: { $sum: { $cond: [ { $eq: [ '$details.CountryName', "US" ] }, 1, 0 ] } },
... Name: { $first: '$Name' }
... }},
... { $project: {
...    _id: 1,
...    Name: 1,
...    details: 1,
...    arrayValue: { $cond: [ { $eq: [ '$alldetails', '$alldetailsmatch' ] }, 1, 0 ] }
...    }},
... { $match: { 'arrayValue' : 1 } }
... ])

這將產生以下輸出 −

{ "_id" : ObjectId("5e724324b912067e57771ae6"), "details" : { "CountryName" : "US", "Marks" : 45 }, "Name" : "John", "arrayValue" : 1 }

更新於: 03-Apr-2020

666 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始
廣告