Meteor中客户端和服务器上的ObjectId之间的区别

时间:2014-03-11 03:00:01

标签: javascript mongodb meteor

我最近在学习Meteor.js并且正在制作一个简单的测试应用程序。我在ids中保存了一系列Session个集合。

我有两个集合:WorkoutsAssignedWorkoutsAssignedWorkouts有一个字段,用于存储id的{​​{1}}。

Workouts在我的系统和服务器上的行为方式不同。

在服务器上,Session.get("assignedWorkouts")是一个对象(Workouts._id),但在我的机器上它是一个字符串。

这是来自test4faceyspacey.meteor.com的控制台,

e._ObjectId

这是我系统的控制台

 Workouts.findOne()._id
 e._ObjectID {_str: "53188350f47ed90eed042df2", toString: function, equals: function, clone: function, typeName: function…}
 typeof Workouts.findOne()._id
 "object"

有关为何如此的任何解释?我向一些资深开发者询问了这个问题,但他们说他们从未遇到过这样的问题。

由于这个原因,我需要维护两个不同版本的代码。

请在此处查看已部署的应用: http://test4faceyspacey.meteor.com/

此处代码:https://github.com/channikhabra/meteor-workouts-app

1 个答案:

答案 0 :(得分:0)

如果您从Meteor插入文档,则默认情况下会获取字符串ID。如果从mongo命令行或某些mongo ui插入文档,默认情况下它会将对象作为id。

您可以在meteor中覆盖此行为,但我建议您尝试使用该字符串。您确实丢失了对象ID中存在的时间戳,但我告诉您无论如何都要使用显式时间戳。

希望有所帮助。