2016-10-13 186 views
0

我想從mongoose/mongodb中的對象數組中返回匹配對象,但是我似乎無法正確理解它。在貓鼬中返回對象數組的子對象

我的架構目前看起來是這樣的:

items: { 
    left: { type: Number, default: 0 }, 
    total: { type: Number, default: 0 }, 
    each: [{ 
     name: String 
    }] 
} 

這使內each每個對象以獲得它自己的對象ID。現在我試圖用貓鼬詢問這個問題,我已經嘗試了$in$elemMatch以及一個普通的.find({ items.each._id: req.params.id })

更具體

Project.findOne({ 'items.each': { $elemMatch: { _id: req.params.id } } }).exec() 

我想回到這樣一個對象:

{ 
    _id: ObjectId(23426456234), 
    name: "My name is" 
} 

但爲什麼我不能得到這個?

+0

有你,如果'重新檢查q.params.id'是一個objectid還是一個字符串?你確定''每個'對象被正確保存在數據庫中嗎? – andresk

回答

0

用途:

db.getCollection('projects').findOne({"items.each._id" : 
ObjectId("57ffc4396270adff8b273f72")},{"items.each.$":1}) 

輸出:

{ 
    "_id" : ObjectId("57ffc4396270adff8b273f71"), 
    "items" : { 
     "each" : [ 
      { 
       "name" : "sdfsd", 
       "_id" : ObjectId("57ffc4396270adff8b273f72") 
      } 
     ] 
    } 
} 

OR:

db.getCollection('projects').aggregate(
{$unwind: "$items.each"}, 
{$match:{"items.each._id" : ObjectId("57ffc4396270adff8b273f72")}}, 
{$project:{_id: 0, each: "$items.each"}} 
) 

輸出:

{ 
    "each" : { 
     "name" : "sdfsd", 
     "_id" : ObjectId("57ffc4396270adff8b273f72") 
    } 
}