一尘不染

NodeJS + MongoDB:使用findOne()从集合中获取数据

node.js

我有一个带有多个对象的集合“ 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"
    },

似乎有点奇怪…


阅读 996

收藏
2020-07-07

共1个答案

一尘不染

您需要构造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上面概述的。

2020-07-07