Używam mongoose.js do wykonywania zapytań do mongodb, ale myślę, że mój problem nie jest specyficzny dla mongoose.js.MongoDB: wybierz dopasowane elementy subcollection
Say mam tylko jeden rekord w kolekcji:
var album = new Album({
tracks: [{
title: 'track0',
language: 'en',
},{
title: 'track1',
language: 'en',
},{
title: 'track2',
language: 'es',
}]
})
Chcę wybrać wszystkie utwory z zakresu języka równe 'en', więc próbowałem dwóch wariantach:
Album.find({'tracks.language':'en'}, {'tracks.$': 1}, function(err, albums){
i przywiązany do tego samego z projekcją $ elemMatch:
Album.find({}, {tracks: {$elemMatch: {'language': 'en'}}}, function(err, albums){
w obu przypadkach mam taki sam wynik:
{tracks:[{title: 'track0', language: 'en'}]}
wybrane album.tracks zawierać tylko jeden element toru z tytułowym 'track0' (ale nie powinno być zarówno 'track0', 'track1'):
{tracks:[{title: 'track0', language: 'en'}, {title: 'track1', language: 'en'}]}
Co robię źle?
nie robisz nic złego, to po prostu sposób działają te pytania - obejmują one tylko pierwszy element pasujący. Myślę, że musisz użyć struktury agregacji, aby zrobić to, co chcesz. – JohnnyHK
Dzięki, mógłbyś podać moją bardziej konkretną wskazówkę czy coś takiego? – WHITECOLOR