2016-10-13 10 views
0

mongoose/mongodbのオブジェクトの配列から一致するオブジェクトを返したいと思いますが、正しいとは思えません。オブジェクト配列の子をmongooseに返します

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

この独自のオブジェクトIDを取得するためにeach内の各オブジェクトを作る:

私のスキーマは、現在、次のようになります。今私はこれをmongooseで照会しようとしています。私は$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'はオブジェクトIDまたは文字列ですか? '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") 
    } 
} 
関連する問題