f1n*_*1nn 16 mongodb node.js express
我有一个集合"公司"与几个对象.每个对象都有"_id"参数.我正试图从db获取此参数:
app.get('/companies/:id',function(req,res){
db.collection("companies",function(err,collection){
console.log(req.params.id);
collection.findOne({_id: req.params.id},function(err, doc) {
if (doc){
console.log(doc._id);
} else {
console.log('no data for this company');
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
所以,我要求公司/ 4fcfd7f246e1464d05000001(4fcfd7f246e1464d05000001是我需要的对象的_id-parma)并且findOne什么都不返回,这就是'为什么console.log('没有这家公司的数据'); 执行.
我绝对相信我有一个_id ="4fcfd7f246e1464d05000001"的对象.我做错了什么?谢谢!
但是,我刚刚注意到id不是典型的字符串字段.这就是mViewer所展示的:
"_id": {
"$oid": "4fcfd7f246e1464d05000001"
},
Run Code Online (Sandbox Code Playgroud)
似乎有点奇怪......
Ada*_*ord 20
您需要构造ObjectID而不是将其作为字符串传递.这样的事情应该有效:
var BSON = require('mongodb').BSONPure;
var obj_id = BSON.ObjectID.createFromHexString("4fcfd7f246e1464d05000001");
Run Code Online (Sandbox Code Playgroud)
然后,尝试在find/findOne中使用它.
编辑:正如Ohad在评论中指出的那样(感谢Ohad!),你也可以使用:
new require('mongodb').ObjectID(req.params.id)
Run Code Online (Sandbox Code Playgroud)
而不是createFromHexString如上所述.