2016-10-13 4 views
0

mongoose/mongodb 개체 배열에서 일치하는 개체를 반환하고 싶습니다하지만 그것을 올바르게 얻을 것 수 없습니다.몽구스 개체 배열의 자식 반환

내 스키마는 현재 다음과 같습니다

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

이 자신의 객체 ID를 얻을 수 each 내에서 각 개체를 확인합니다. 이제 나는 이것을 몽구스로 질문하려고합니다. $in$elemMatch과 일반 .find({ items.each._id: req.params.id })을 시도했습니다. 나는이 얻을 수없는 이유

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

그러나 :

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

이 같은 객체를 반환 할

보다 구체적인

?

+0

당신은 다시'경우 확인 했 q.params.id'는 objectid 또는 문자열입니까? 그리고'each' 객체가 데이터베이스에 올바르게 저장되고 있는지 확인 하시겠습니까? – 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") 
    } 
} 
관련 문제