我使用名为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?如果存在自动转换,如何使此行为保持一致?
谢谢!
答案 0 :(得分:1)
我猜测resultClient
是查询的结果,req.session.user.company_id
来自您的网络应用程序的字符串?在这种情况下,您需要从字符串中创建一个ObjectId:
clientCompany.creator = mongoskin.ObjectID(req.session.user.company_id);