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



我有一个像这样的mongo系列

{"stores": [{"name": "foo",
             "songs": [ {"id": "", "name": "", "artist": "", "category": "", "tags": []} ],
             "songsSchedule": [
                               {
                                "song_id": "",
                                "date": ,
                                "user": "",
                                "help": ,
                                "partners": [{"user": ""}],
                                "likes":
                               }
                             ]
 }]}

我想从Songschedule 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);
    });
    });
});

我真的不知道这是否是最好的方法

我并不完全清楚您的意思是"从歌曲中获取歌曲名称和艺术家Song_id",但看来查询会很混乱。

如果是我,我会考虑将歌曲和歌曲划分为自己的收藏,以更轻松地查询。

在您的文档示例中,"歌曲"字段包含不包含" _id"字段的文档。

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

但是,您的find()查询在" songs._id"字段上查询。

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

问:

kay

最新更新