繁体   English   中英

在mongoDB中获取具有ID数组的集合中的对象

[英]Get objects in a collection with an array of id's in mongoDB

使用node.js / express和mongoDB构建API。 我有两个具有很多对许多关系的集合:用户和项目。 我想获取用户关注的所有项目。 用户Items是一个数组,其ID引用Items。

我如何查询,以便我在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获得了useritems 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
                });
            });
        });
    });
};

也许这更像吗?

exports.findItemsByUserId = function(req, res) {
  var userId = "51e101df2914931e7f000003"; //Just for testing
  var user = db.users.find({"_id": userId});

  var items = db.items.find({'_id': {'$in' : user.useritems}});
  res.send(items.toArray());
};

问题解决了。 不是最理想的解决方案,但它可以工作。 只是遍历一些数组。 猜猜对此有一些适当的查询。

exports.findItemsByUserId = function(req, res) {
   var id = req.params.id; //<--- was disabled, it will give an error when testing this code.

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

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

            db.collection('items', function(err, collection) {
                var itemsArray = []

                var itemIds = user.useritems

                for (var i = 0; i < itemIds.length; i++) {
                    itemIds[i]

                    collection.findOne({'_id':new BSON.ObjectID(itemIds[i])}, function(err, item) {

                    itemsArray.push(item);

                    if(itemIds.length === itemsArray.length){

                        res.send(itemsArray);

                    }

                    });
                };

            });
        });
    });
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM