我正在使用mongoose.js對mongodb執行查詢,但我認爲我的問題不是特定於mongoose.js。MongoDB:選擇與子集合相匹配的元素
說我有收集只有一條記錄:
var album = new Album({
tracks: [{
title: 'track0',
language: 'en',
},{
title: 'track1',
language: 'en',
},{
title: 'track2',
language: 'es',
}]
})
我想選擇與語言字段等於「恩」所有的曲目,所以我嘗試兩種型號:
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' 只有一個線路元件(但應該有兩個 'track0', 'TRACK1'):
{tracks:[{title: 'track0', language: 'en'}, {title: 'track1', language: 'en'}]}
我在做什麼錯?
你沒有做錯什麼,這只是這些查詢的工作方式 - 他們只包括第一個匹配的元素。我認爲你需要使用聚合框架來做你想做的事情。 – JohnnyHK 2013-03-14 17:27:06
謝謝,你能給我更特別的提示或什麼嗎? – WHITECOLOR 2013-03-14 19:03:24