2017-03-22 11 views
0

が、私はこのようになりますようにスキーマいます配列内のオブジェクト、つまり配列のオブジェクトを見つけることができますか?

parent: [{ 
       year: Number, 
       kind: String, 
       child: [{age: Number, value: Number}] 
      }], 

私のクエリは次のようになります。予想通り

myDB.findOne({'parent.year': year, 'parent.kind': kind}) 
.where('parent.child.age').equals(age) 

、私は正しい親要素を取得します。しかし、その親要素は、あなたが見ることができるように、子を持つ配列を持っています。とにかくmongooseは私に子配列の単一のオブジェクトを与えることができますか?それとも私自身で見つける必要がありますか?

ありがとうございました。

+0

あなたはfindoneの代わりにaggregateを使用し、子どもに$ unwindコールを使用しましたか? – Woodsy

答えて

1

このために集計が機能します。 $unwindコマンドは、アレイ内の各エントリの文書を作成します。

myDB.aggregate([ 
    {$unwind:'$parent.child'}, 
    {$match:{ 
     'parent.year':year, 
     'parent.kind':kind, 
     'child.age':age} 
    }, 
    {$limit:1} 
    ], function(err,doc) { 
    //Do stuff here with doc 
}); 

あなたはもう少し複雑ですが、非常になんとかですアンワインド結果を再編成する必要があります他の子供たちを返却する必要がある場合。

関連する問題