Javascript Meteor中客户端和服务器上ObjectId之间的差异
我最近在学习Meteor.js,正在制作一个简单的测试应用程序。我在Javascript Meteor中客户端和服务器上ObjectId之间的差异,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我最近在学习Meteor.js,正在制作一个简单的测试应用程序。我在会话中保存了一个集合的id数组 我有两个系列:Workouts和AssignedWorkouts分配的训练有一个字段,用于存储训练的id Session.get(“assignedWorkouts”)在我的系统和服务器上的行为不同 在服务器上,训练。_id是一个对象(e._ObjectId),但在我的机器上它是一个字符串 这是Test4FaceySpace.meteor.com的控制台 Workouts.findOne()._
会话中保存了一个集合的id
数组
我有两个系列:Workouts
和AssignedWorkouts
<代码>分配的训练
有一个字段,用于存储训练的id
Session.get(“assignedWorkouts”)
在我的系统和服务器上的行为不同
在服务器上,训练。_id
是一个对象(e._ObjectId
),但在我的机器上它是一个字符串
这是Test4FaceySpace.meteor.com的控制台
Workouts.findOne()._id
e._ObjectID {_str: "53188350f47ed90eed042df2", toString: function, equals: function, clone: function, typeName: function…}
typeof Workouts.findOne()._id
"object"
这是从我的系统控制台
Workouts.findOne()._id
"58pa4pp3Lgwef7vGA"
typeof Workouts.findOne()._id
"string"
有没有解释为什么会这样?我问过一些高级开发人员,但他们说他们从来没有遇到过这样的问题
因此,我需要维护两个不同版本的代码
请在此处检查已部署的应用程序:
此处代码:如果您从Meteor插入文档,默认情况下它会获取字符串id。如果从mongo命令行或某个mongo ui插入文档,默认情况下,它会将对象作为id
您可以在meteor中重写此行为,但我建议您尝试使用字符串。您确实丢失了对象id中存在的时间戳,但我告诉您无论如何都要使用显式时间戳
希望能有所帮助。谢谢。实际上,我在服务器上插入了mongo cli中的所有行。我用不同的url重新部署了应用程序进行测试,现在它可以正常工作了,即id
是字符串。我如何克服这种行为?我试图在数据库中查找外部插入的对象,因此它对_id使用ObjectId(),但Meteor.Collection.ObjectId(“对象id的值”)返回_str:“我的id”,而不是ObjectId类型