使用嵌套ID在JSON中查找对象

时间:2012-11-08 15:43:54

标签: node.js mongodb node-mongodb-native restify

我有像这样的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);
    });
    });
});

并且我真的不知道这是否是最佳方式

2 个答案:

答案 0 :(得分:1)

我不清楚你的意思是“从songsSchedule song_id获取歌曲名称和艺术家”,但看起来这个查询会很混乱。

如果是我,我会考虑将歌曲和songSchedule分成他们自己的收藏品以便于查询。

答案 1 :(得分:0)

从您的文档示例中,“歌曲”字段包含不包含“_id”字段的文档。

    "songs": [ {"name": "", "artist": "", "category": "", "tags": []} ]

但是,你的find()查询正在查询“songs._id”字段。

另外,我对json()方法不太熟悉,但它是否处理游标?

此致