Mongodb 了解新的mongo id并与iron router一起使用

Mongodb 了解新的mongo id并与iron router一起使用,mongodb,meteor,iron-router,Mongodb,Meteor,Iron Router,我有一个简单的post路线,可以查找post\u id。 问题是pathFor帮助程序创建了如下路径: ObjectID("52e16453431fc2fba4b6d6a8") 我猜mongoDB的插入已经更改,现在\u id对象在其内部包含另一个名为\u str的对象 这是我的路线: this.route("post", { path: "/post/:_id", waitOn:function(){ NProgress.start(

我有一个简单的post路线,可以查找post
\u id
。 问题是
pathFor
帮助程序创建了如下路径:

ObjectID("52e16453431fc2fba4b6d6a8")
我猜mongoDB的插入已经更改,现在
\u id
对象在其内部包含另一个名为
\u str
的对象

这是我的路线:

this.route("post", {
        path: "/post/:_id",

        waitOn:function(){
            NProgress.start();
            Meteor.subscribe("Teams");
        },

        before: function () {
            NProgress.done();
        },

        data: function () {
            return Posts.findOne({_id: this.params._id});
        }
    });
目前,它创建了一个
href
,如:

 post/ObjectID("52e16453431fc2fba4b6d6a8")
点击它会打开一个url

post/ObjectID("52e16453431fc2fba4b6d6a8") 
但是,我得到的是“NotFound”模板,而不是帖子

如何修复此问题?

您可以尝试以下方法:

this.route("post", {
    path: "/post/:stringId",

    waitOn:function(){
        NProgress.start();
        Meteor.subscribe("Teams");
    },

    before: function () {
        NProgress.done();
    },

    data: function () {
        Post = Posts.findOne({_id: Meteor.ObjectId(this.params.stringId)});
    }
});
现在,当您转到
post/52e16453431fc2fba4b6d6a8
时,您应该能够看到正确的帖子

实际上,我正计划在我的应用程序中使用iron router和objectid,并认为这种模式会起作用


我还没有尝试过,但是如果有问题,请告诉我,我将创建一个小测试应用程序来解决。

您需要更改“post”的
路径
以通过ObjectId的十六进制表示形式
52e16453431fc2fba4b6d6a8
而不是
ObjectId('52e16453431fc2fba4b6d6a8')

对于“post”\u id=this.\u id.toHexString

一旦传递十六进制字符串,就可以在路由器中使用它


return Posts.findOne({u id:new Meteor.Collection.ObjectID(this.params.finid)})

好的,所以mongo insertion现在在_id字段中有了objectId字段,所以我想弄清楚的是如何使pathFor工作,我需要在_id中获得对象,通常我会用点符号这样做:_id。_str尝试执行路径:“/post/:_id._str”输出:post/objectId(“52e16453431fc2fba4b6d6a8”)我来看看,mongo风格的objectID和meteor Id到底有什么区别?这就是我想说的。Mongo的objectid类嵌入了一个时间戳。流星是随机的。Meteor似乎选择了只使用字符串的id实现,以便更容易在路由中使用id,在dom中使用id等。但我也不确定具体细节。这里是。toHexString不起作用,所以我使用:_id=this。_id。_str