我有像这样的mongo系列
{"stores": [{"name": "foo",
"songs": [ {"id": "", "name": "", "artist": "", "category": "", "tags": []} ],
"songsSchedule": [
{
"song_id": "",
"date": ,
"user": "",
"help": ,
"partners": [{"user": ""}],
"likes":
}
]
}]}
我希望从songsSchedule song_id中获取歌曲名称和艺术家,我已经尝试了这个但是它不起作用
var query = { _id: fn.generateID(req.params.store_id), songsSchedule: { $exists: true } };
var select = { songsSchedule:1 };
var array = [];
client("stores", function(err, collection) {
if (err)
return res.json(fn.status("30"));
collection.findOne(query, select, function(err, store) {
if (err || !store)
return res.json(fn.status("31"));
for (var i in store.songsSchedule) {
var song = store.songsSchedule[i];
array.push(song.song_id);
}
collection.find({ _id: fn.generateID(req.params.store_id), "songs._id": { $in: array } }, function(err, songs) {
res.json(songs);
});
});
});
并且我真的不知道这是否是最佳方式
答案 0 :(得分:1)
我不清楚你的意思是“从songsSchedule song_id获取歌曲名称和艺术家”,但看起来这个查询会很混乱。
如果是我,我会考虑将歌曲和songSchedule分成他们自己的收藏品以便于查询。
答案 1 :(得分:0)
从您的文档示例中,“歌曲”字段包含不包含“_id”字段的文档。
"songs": [ {"name": "", "artist": "", "category": "", "tags": []} ]
但是,你的find()查询正在查询“songs._id”字段。
另外,我对json()方法不太熟悉,但它是否处理游标?
此致
凯