【问题标题】:MongoDB _id is convert to ObjectID automatically, but sometime it is not.MongoDB _id 会自动转换为 ObjectID,但有时不会。
【发布时间】:2014-07-27 08:40:48
【问题描述】:

我正在使用一个名为 mongoskin 的包装器来访问 mongoDB。 mongoskin 是一个简单的 mongoDB javascript api 包装器。

但是当我写入 mongoDB 时,有时 _id 被转换为 ObjectID,有时不是。当我必须比较 _id 时,不同的行为会导致很多问题。例如:

公司集合中的以下文档,“creator”不会转换为ObjectID,但“clients”中的项目会自动转换为ObjectID。

> db.company.find()
{ "_id" : ObjectId("53d4b452f5b25900005cb998"), "name" : "Default Company Co.", "clients" : [ ObjectId("53d4b452f5b25900005cb999"), ObjectId("53d4b452f5b25900005cb99a") ] }
{ "_id" : ObjectId("53d4b452f5b25900005cb999"), "name" : "client company for 777 - updated", "creator" : "53d4b452f5b25900005cb998", "ssn" : "12-123-1234" }

这是我用来为“creator”分配_id的nodejs代码

clientCompany.creator = req.session.user.company_id;

这是我用来为“clients”分配_id的nodejs代码

var updateObj = {$addToSet: {clients:resultClient._id} };
// update creator company.clients
creatorCompany.update(updateObj, function(err, result) { ...}

当我 console.log "req.session.user.company_id" 和 "resultClient._id" 时,它们看起来都像一个字符串类型。怎么会在 MongoDB 中成为 ObjectID?如果有自动转换,如何使这种行为保持一致?

谢谢!

【问题讨论】:

    标签: node.js mongoskin


    【解决方案1】:

    我猜resultClient 是查询的结果,req.session.user.company_id 是您的 Web 应用程序中的字符串?在这种情况下,您需要从字符串创建一个 ObjectId:

    clientCompany.creator = mongoskin.ObjectID(req.session.user.company_id);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多