node.js使用monk从数组中按id获取文档
node.js getting documents by id from an array using 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参数有或没有单引号,但运气不好,我返回的docs数组总是空的。我可以通过从控制台访问数据库来确认我的数据库确实包含集合和文档:
> 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 }
您正试图使用字符串查询数据库,其中ObjectID是一个实际对象。要将字符串转换为ObjectID,可以使用mongoose.Types.ObjectId(string)
,我不确定这是否能解决您的问题,但这是朝着正确方向迈出的一步。
看起来MaxKroshka和Tal Avissar都是正确的,我设法使查询正常工作(尽管目前它仍然只返回第一个项目,并按照建议修改了我的代码:
首先,monk确实不需要用-符号转义id字段名,所以我用一个普通的id字符串替换了它。
其次,似乎可以从一个普通的十六进制id字符串转换为一个成熟的id对象,该对象可以使用monks的collection.id(hexString)函数传递给查询。
这是我修改后的代码,它起作用了(再次,但只返回提供的数组中的第一个)
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);
});
相关文章:
- 使用angularjs中的rest调用通过id获取数据
- javascript从id获取数字
- 如何通过ID获取图层对象
- 通过jstree中的Id获取节点
- 在控制器中按ID获取XML ViewElement(MultiInput)
- node.js使用monk从数组中按id获取文档
- 如何使用API从多个IMDB ID获取电影信息
- 我的ID获取元素不起作用
- 如何通过 id 获取“this”元素并查看是否选中
- 使用类而不是 ID(通过 CLASS 而不是 ID 获取元素)
- 如何在Ember.js中使用jQuery通过id获取元素
- 使用类名按ID获取元素
- jquery模态对话框通过id获取输入类型text的值
- 通过ID获取声明性dojo数据网格
- 可以't按id获取元素
- 根据DropDown ID获取DropDownListFor的选定值
- jquery如何使用chlid id获取父元素的类
- 在iframe中通过id获取元素
- 主干模型通过ID获取JSON元素
- 在javascript中通过id获取元素,而页面上没有任何表单标记