MongoDB 查詢僅會獲得巢狀陣列文件中的特定欄位?
若要僅在巢狀陣列文件中獲取特定欄位,請將其與 $project 一起使用。讓我們建立一個包含文件的集合 -
> db.demo342.insertOne({ ... "Id": "101", ... "details1" : { ... "details2" : [ ... { ... "details3" : [ ... { ... "Name": "Mike", ... "CountryName" : "US" ... }, ... { ... "Name": "David", ... "CountryName" : "AUS" ... }, ... { ... "Name": "Bob", ... "CountryName" : "UK" ... } ... ] ... } ... ] ... } ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e53ef99f8647eb59e5620a9") }
藉助 find() 方法顯示集合中的所有文件 -
> db.demo342.find();
這將生成以下輸出 -
{ "_id" : ObjectId("5e53ef99f8647eb59e5620a9"), "Id" : "101", "details1" : { "details2" : [ { "details3" : [ { "Name" : "Mike", "CountryName" : "US" }, { "Name" : "David", "CountryName" : "AUS" }, { "Name" : "Bob", "CountryName" : "UK" } ] } ] } }
以下是僅獲取巢狀陣列文件中特定欄位的查詢 -
> db.demo342.aggregate([ ... { "$project": { ... "details1": { ... "details2": { ... "$filter": { ... "input": { ... "$map": { ... "input": "$details1.details2", ... "in": { ... "details3": { ... "$filter": { ... "input": "$$this.details3", ... "cond": { "$eq": ["$$this.Name", "Bob"] } ... } ... } ... } ... } ... }, ... "cond": { "$ne": ["$$this.details3", []] } ... } ... } ... } ... }} ... ])
這將生成以下輸出 -
{ "_id" : ObjectId("5e53ef99f8647eb59e5620a9"), "details1" : { "details2" : [ { "details3" : [ { "Name" : "Bob", "CountryName" : "UK" } ] } ] } }
廣告