MongoDB _id会自动转换为ObjectID,但有时则不然。

时间:2014-07-27 08:40:49

标签: node.js mongoskin

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

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

公司集合中的以下文件,"创作者"不会转换为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" }

这是我用来为#34; creator"

分配_id的nodejs代码
clientCompany.creator = req.session.user.company_id;

这是我用来为"客户"

分配_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?如果存在自动转换,如何使此行为保持一致?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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