0

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

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

公司集合中的以下文档,“创建者”不会转换为ObjectID,但“客户”中的项目会自动转换为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" }

这是我用来为“创建者”分配 _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?如果有自动转换,如何使这种行为保持一致?

谢谢!

4

1 回答 1

1

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

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

于 2014-07-27T12:37:32.947 回答