私はmongoose.jsを使用してmongodbへのクエリを実行していますが、私の問題はmongoose.jsに固有のものではないと思います。
コレクションにレコードが1つしかないとします。
var album = new Album({
tracks: [{
title: 'track0',
language: 'en',
},{
title: 'track1',
language: 'en',
},{
title: 'track2',
language: 'es',
}]
})
言語フィールドが「en」に等しいすべてのトラックを選択したいので、2つのバリエーションを試しました。
Album.find({'tracks.language':'en'}, {'tracks.$': 1}, function(err, albums){
$ elemMatchプロジェクションで同じものに関連付けられています:
Album.find({}, {tracks: {$elemMatch: {'language': 'en'}}}, function(err, albums){
どちらの場合でも、同じ結果が得られます。
{tracks:[{title: 'track0', language: 'en'}]}
選択したalbum.tracksには、タイトルが「track0」のトラック要素が1つだけ含まれています(ただし、「track0」と「track1」の両方が必要です)。
{tracks:[{title: 'track0', language: 'en'}, {title: 'track1', language: 'en'}]}
私は何が間違っているのですか?