僅從 MongoDB 集合中一個物件陣列中檢索查詢的元素?


可以使用投影運算子 $elemMatch 來過濾 MongoDB 集合中物件陣列中的查詢元素。要僅檢索 MongoDB 中物件陣列中的查詢元素,我們首先使用物件陣列建立一個文件集合。

查詢如下所示

> db.objectArray.insert({"Persons":[
   {"PersonName":"Adam","PersonSalary":25000},{"PersonName":"Larry","PersonSalary":27000
   }]});
   WriteResult({ "nInserted" : 1 })
> db.objectArray.insert({"Persons":[
   {"PersonName":"David","PersonSalary":32000},{"PersonName":"Carol","PersonSalary":77000
   }]});
   WriteResult({ "nInserted" : 1 })

現在,可以使用 find() 顯示所有文件。查詢如下所示

> db.objectArray.find().pretty();

以下是輸出

{
   "_id" : ObjectId("5c6bfadc68174aae23f5ef53"),
   "Persons" : [
      {
         "PersonName" : "Adam",
         "PersonSalary" : 25000
      },
      {
         "PersonName" : "Larry",
         "PersonSalary" : 27000
      }
   ]
}
{
   "_id" : ObjectId("5c6bfb0968174aae23f5ef54"),
   "Persons" : [
      {
         "PersonName" : "David",
         "PersonSalary" : 32000
      },
      {
         "PersonName" : "Carol",
         "PersonSalary" : 77000
      }
   ]
}

以下是僅檢索 MongoDB 中物件陣列中查詢元素的查詢。在此處,_id:0 用於排除 id 屬性(不顯示 _id 屬性)

> db.objectArray.find({"Persons.PersonSalary":25000}, {
_id:0,Persons:{$elemMatch:{"PersonSalary":25000}}}).pretty();

以下是輸出

{
   "Persons" : [
      {
         "PersonName" : "Adam",
         "PersonSalary" : 25000
      }
   ]
}

完成以上任務的另一種方法是藉助投影運算子 $。查詢如下所示

> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0,'Persons.$':1}).pretty();

以下是輸出

{
   "Persons" : [
      {
         "PersonName" : "Adam",
         "PersonSalary" : 25000
      }
   ]
}

更新於:30-7-2019

255 次瀏覽

開啟您的職業

完成課程獲得認證

開始
廣告