我有一个带有多个对象的集合“ companies”。每个对象都有“ _id”参数。我正在尝试从数据库获取此参数:
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'); } }); }); });
因此,我请求公司/ 4fcfd7f246e1464d05000001(4fcfd7f246e1464d05000001是我需要的对象的_id- parma),并且findOne不返回任何内容,这就是为什么console.log(’该公司没有数据’); 执行。
我绝对确定我有一个带有_id =“ 4fcfd7f246e1464d05000001”的对象。我做错了什么?谢谢!
但是,我刚刚注意到id不是典型的字符串字段。 这就是mViewer显示的内容:
"_id": { "$oid": "4fcfd7f246e1464d05000001" },
似乎有点奇怪…
您需要构造ObjectID而不是将其作为字符串传递。这样的事情应该起作用:
var BSON = require('mongodb').BSONPure; var obj_id = BSON.ObjectID.createFromHexString("4fcfd7f246e1464d05000001");
然后,尝试在find / findOne中使用它。
编辑:正如Ohad在评论中指出的(感谢Ohad!),您还可以使用:
new require('mongodb').ObjectID(req.params.id)
而不是createFromHexString上面概述的。
createFromHexString