3

node.js/express と mongoDB を使用して API をビルドします。多対多の関係を持つ 2 つのコレクション、Users と Items があります。ユーザーがフォローしているすべてのアイテムを取得したい。ユーザーのアイテムは、アイテムを参照する ID を持つ配列です。

useritems 配列内のすべてのアイテムを取得するためにクエリを実行するにはどうすればよいですか?

コレクション:

ユーザー:

{
    email: "johnny@hotmail.com",
    username: "johnny",
    useritems: ["51e101df2914931e7f000003", "51cd42ba9007d30000000001"]
}

アイテム:

{
       "name": "myitem",
       "description": "Description of item" 
       "_id": "51e101df2914931e7f000003"
}

{
       "name": "myitem2",
       "description": "Description of item2" 
       "_id": "51cd42ba9007d30000000001"
}

{
       "name": "myitem3",
       "description": "Description of item3" 
       "_id": "51e101df2914931e7f000005"
}

編集:

コードを更新しました。ユーザーIDに基づいてユーザーアイテムIDの配列を取得します。問題は、アイテムを配列に送信しようとしたときです。アイテムは常に空です。クエリに何か問題がありますか?

exports.findItemsByUserId = function(req, res) {
    //var id = req.params.id;

   var userId = "51e6a1116074a10c9c000007"; //Just for testing

    db.collection('users', function(err, collection) {
        collection.findOne({'_id':new BSON.ObjectID(userId)}, function(err, user) {

            db.collection('items', function(err, collection) {

                console.log("user undefined? ",user);
                console.log("useritems ",user.useritems);
                collection.find({'_id': {'$in' : user.useritems}}).toArray(function(err, items) {
                    console.log("useritems ",user.useritems); // <--Gets me array with the ids
                    console.log("items ", items); //<--Empty
                    res.send(items);//Empty
                });
            });
        });
    });
};
4

2 に答える 2