我试图在我的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()
。我不知道为什么,任何想法?
答案 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);