我有一个Collection "公司",里面有几个物品.每个对象都有"_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');
        }
    });
});
});

因此,我请求companys/4fcfd7f246e1464d05000001(4fcfd7f246e1464d05000001是我需要的对象的_id-parma),findOne没有返回任何内容,这就是为什么.日志(log)("本公司无数据");执行.

我绝对确定我有一个带有_id="4fcfd7f246e1464d05000001"的对象.我做错了什么?谢谢

However, I've just noticed that id is not a typical string field. That's what mViewer shows:

"_id": {
        "$oid": "4fcfd7f246e1464d05000001"
    },

似乎有点奇怪...

推荐答案

您需要构造ObjectID,而不是将其作为字符串传递.像这样的方法应该有用:

var BSON = require('mongodb').BSONPure;
var obj_id = BSON.ObjectID.createFromHexString("4fcfd7f246e1464d05000001");

然后,试着在find/findOne中使用它.

编辑:正如Ohad在 comments 中指出的(谢谢Ohad!),您还可以使用:

new require('mongodb').ObjectID(req.params.id)

而不是上文所述的createFromHexString.

Mongodb相关问答推荐

如何限制/筛选子文档中的条目?

如何在MongoSH中的现有文档中插入字段

在MongoDB Aggregate for My BooksDB中将`$match`放在`$unwin`之前或之后的区别

在数组对象 Mongodb 中仅 Select 需要的数组

聚合管道可以用于更新数据库中的文档吗?

Mongoose 聚合和多级组

按数组mongodb中的第一个元素排序

在 ExpirePolicy 之后从 Store 中删除元素

$lookup 的参数必须是字符串

在mongoose中添加多个验证

Stripe:必须提供来源或客户

加载时将 mongo 存储的日期转换回自 Unix 纪元以来的毫秒数?

Node.js 和 Passport 对象没有方法 validPassword

如何在 Ruby on Rails 环境中使用 Mongoid 进行通配符搜索?

mongoose递归填充

Mongoose 连接认证失败

mongoose 使用 $cond 中的 $exists 聚合

RoboMongo:不显示所有文档

更新时提示Field name duplication not allowed with modifiers

对象不是 JSON 可序列化的