0

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

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

4

2 回答 2

1

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

如果是我,我会考虑将歌曲和 songSchedule 拆分到他们自己的集合中以便于查询。

于 2012-11-08T16:12:24.893 回答
0

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

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

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

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

问候,

于 2012-11-08T17:41:36.857 回答