我正在使用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