使用mongoDB中的id数组获取对象

使用node.js / express和mongoDB构build一个API。 我有两个集合,像一个多对多的关系,用户和项目。 我想获得用户所关注的所有项目。 用户Items是一个带有指向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的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()); }; 

问题解决了。 不是最花哨的解决scheme,但它的工作原理。 循环访问一些数组。 猜猜这有一些正确的查询。

 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); } }); }; }); }); }); };