如何使用ObjectID显示mongoDB中的数据

时间:2014-09-10 09:41:42

标签: mongodb meteor iron-router objectid

我有一个"后端"在MongoDb中编写的应用程序(在数据库中我有_id:使用ObjectId(" 13f6ea ... 002"))我使用meteor app来显示信息。一切都很好我用{{#each}}显示信息列表。但是,当我想要显示一个元素' _Id'什么都行不通。

我阅读this issue并调整我的代码以获得正确的根,但我无法在页面上显示任何内容。我试着写模板助手,但它没有帮助

Db记录:

  {
 _id: ObjectId("13f6ea...002"),
 url: "foo",
 title: "bar",
 published: "2014-08-22 03:26:21 UTC",
 image: "foo.jpg",
 summary: "foo ",
 categories: [
   "F",
   "B"
  ],
  ...
  }

路线:

this.route('news', {
path: '/news/:_id',
template: 'news',
waitOn: function () { 
  var id = this._id; 
  Meteor.subscribe('news', id);
},
data: function() {
  var id = this.params._id;
  return News.findOne({ _id: Meteor.Collection.ObjectID(this.params._id)});
},
 action : function () {this.render();},
});

发布

Meteor.publish('news', function(id) {
  return News.find({_id: id}); 
});

重定向到唯一帖子的模板

<h4><a href="{{pathFor 'news' _id=this._id.toHexString}}">{{title}}</a></h4>

模板只是{{news}}

我该如何解决这个问题?


更新

我的解决方案:

router.js

waitOn: function () {
  var id = this._id;
  Meteor.subscribe('News', id);
},
data: function() {
  return News.findOne(new Meteor.Collection.ObjectID(this.params._id));
},

并在模板中

<a href="news/{{_id._str}}">

2 个答案:

答案 0 :(得分:1)

导航到浏览器中的相应网址(即localhost:3000/news/[_id]),打开控制台并输入:

Router.current().data()

这将显示当前路线的数据上下文。要么它什么也不返回,在这种情况下,News.findOne查询存在根本问题,因为它没有返回任何内容,或者(更有可能)它返回所需的文档。

在后一种情况下,据我所知,该文档中没有news属性,这就是它不能呈现任何内容的原因。如果您将{{news}}更改为{{url}}{{summary}},我会想象它会呈现所请求的属性。

如果按{{news}}您尝试呈现整个文档,那么(除了它将呈现为[Object]之类的事实)您需要news数据函数返回的对象的属性:

return {
    news: News.findOne({ _id: Meteor.Collection.ObjectID(this.params._id)});
};

答案 1 :(得分:0)

使用_id获取文档: 在事件下的.js文件中,在Click事件和Collection EventList上说: -

    'Submit form' : function () {
        var id = this._id;      
        return EventList.find({_id : id}).fetch();
    }

这将返回id的对象。在我的案例中,我正在显示Collection中所有文档的字段。用户选择一条记录并单击“提交”,这将提取所有“文档”字段并显示给用户