node.js使用monk从数组中获取id的文档

时间:2016-04-30 06:55:03

标签: javascript node.js mongodb monk

我尝试使用一组ID从mongodb中的一个集合中获取一些文档

类似于SQLish

SELECT * FROM TABLE WHERE <id> IN [1,3,4]

以下是我使用的代码:

var prodCollection = req.db.get('products');
      prodCollection.find({'-_id':{'$in':["572446507cd5bb7304d75993","572446507cd5bb7304d75994"]}},{}, function(err, docs){
        if(err) throw err;
        res.send(docs);
      });

我的设置是使用express和monk在本地主机上运行的node.js服务器。我还尝试了相同代码的各种版本,有或没有单引号用于IN和_id参数,但没有运气,我的返回文档数组总是空的。我可以通过从控制台访问它确认我的数据库确实包含集合和文档:

> db.products.find()
{ "_id" : ObjectId("572446507cd5bb7304d75993"), "name" : "apples", "quantity" : 20, "checked" : false }
{ "_id" : ObjectId("5724466c7cd5bb7304d75994"), "name" : "bananas", "quantity" : 2, "checked" : false }
{ "_id" : ObjectId("5724467e7cd5bb7304d75995"), "name" : "cerial", "quantity" : 10, "checked" : true }

2 个答案:

答案 0 :(得分:0)

您正在尝试使用字符串查询数据库,其中ObjectID是实际对象。要将字符串转换为ObjectID,您可以使用mongoose.Types.ObjectId(string),我不确定这是否可以解决您的问题,但这是朝着正确方向迈出的一步。

答案 1 :(得分:0)

似乎MaxKroshka和Tal Avissar都是正确的,我设法使查询工作(虽然现在它仍然只返回第一项通过修改我的代码建议:

首先,monk不需要使用 - 符号转义_id字段名称,所以我用普通的_id字符串替换它。

其次,似乎可以从普通的十六进制id字符串转换为完全成熟的id对象,可以使用monks&#39; collection.id(hexString)&#39;传递给查询。功能

这是我修改过的代码(再次,但只返回提供的数组的第一个)

var prodCollection = req.db.get('products');
var idObjects = [];

//this was the real magic to get it working, converting string id to object
for(var i=0; i<group.products.length; i++){
    dObjects.push(prodCollection.id(group.products[i]));
}

prodCollection.find({'_id':{$in:idObjects}},{}, function(err, docs){
if(err) throw err;
    res.send(docs);
});