我尝试使用一组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 }
答案 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);
});