Flow Router不能使用ObjectID。任何修复?

时间:2016-02-29 23:57:45

标签: mongodb meteor

我试图在我的Meteor应用程序中构建路线。路由工作完全正常,但从路径路径获取db的信息是行不通的。我用这个创建我的页面特定路线:

FlowRouter.route('/level/:id'...

这条路线带我到相关模板没有问题。然后我想从属于该页面的数据库中获取一些数据。在我的模板助手中,我得到了我的页面ID:

var id = FlowRouter.getParam('id');

这将获得ObjectID()但是以字符串格式。所以我尝试在集合中找到ObjectID()文档:

Levels.findOne({_id: id});

但是当然文档没有字符串格式的ObjectID(否则我们就不会调用它" object" id)。因此,它带来了未定义的错误。我不想处理创建自己的_id s所以我能做些什么吗?

PS:Mongo曾经用纯文本创建_id。就像我现在可以使用_id._str一样,但突然间,它会生成ObjectID()。我不知道为什么,任何想法?

1 个答案:

答案 0 :(得分:3)

MongoDB默认使用ObjectIds作为_id,默认情况下Meteor显式设置GUID字符串。

也许您过去使用meteor shell会话插入,现在使用了mongo shell / GUI或meteor mongo提示符,这导致ObjectId被创建。< / p>

如果在开发环境中发生这种情况,您可以再次生成数据。

否则,您可以尝试使用_id为您的数据生成新的Meteor.uuid()

如果要将ObjectId用作特定集合的默认值,可以将idGeneration选项指定为其构造函数'MONGO'

如果您拥有ObjectId的字符串内容并想要转换它,则可以发出

let _id = new Mongo.ObjectID(my23HexCharString);