0

私はこのようなモンゴコレクションを持っています

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

曲の名前とアーティストをsongsSchedulesong_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

「songSchedule 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 に答える