Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ObjectID显示来自mongoDB的数据_Mongodb_Meteor_Iron Router_Objectid - Fatal编程技术网

如何使用ObjectID显示来自mongoDB的数据

如何使用ObjectID显示来自mongoDB的数据,mongodb,meteor,iron-router,objectid,Mongodb,Meteor,Iron Router,Objectid,我有一个用MongoDb编写的“后端”应用程序(在数据库中我有_id:with ObjectId(“13f6ea…002”)),我使用meteor应用程序来显示信息。一切都很好,我用{{{#each}显示信息列表。但是当我想显示一个带有“_Id”的元素时,什么都不起作用 我阅读并修改代码以获得正确的根目录,但我无法在页面上显示任何内容。我试着写模板助手,但没用 数据库记录: { _id: ObjectId("13f6ea...002"), url: "foo", title: "bar

我有一个用MongoDb编写的“后端”应用程序(在数据库中我有_id:with ObjectId(“13f6ea…002”)),我使用meteor应用程序来显示信息。一切都很好,我用{{{#each}显示信息列表。但是当我想显示一个带有“_Id”的元素时,什么都不起作用

我阅读并修改代码以获得正确的根目录,但我无法在页面上显示任何内容。我试着写模板助手,但没用

数据库记录:

  {
 _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>
和在模板中


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

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

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

如果通过
{{news}}
您试图呈现整个文档,那么(除了它将呈现为类似
[Object]
的内容之外),您需要将
news
作为数据函数返回的对象的属性:

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

正在获取具有_id的文档: 在事件下的.js文件中,单击事件和集合事件列表:-

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

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

谢谢,您的回答是对的,我得到“未定义”。但是无法理解my.findOne有什么问题。如果您只是从控制台运行相同的
findOne
查询,是否会得到结果?如果在路由控制器中定义了
data
属性(如果有),我认为这将覆盖路由本身中设置的上下文,但是如果在控制台中运行查询时没有返回任何内容,那么这就是问题所在。我得到
TypeError:this.params未定义
我有waitOn(不确定是否需要)和我的路径中的数据函数,正如我上面所写的。对不起,我指的是相同的查询,而不是相同的代码<代码>此.params将在控制台中未定义,因为它在路由定义之外。你需要运行
News.findOne({id:Meteor.Collection.ObjectID('[IDSTRING]')})
,用你在URL中提供的任何id替换
[IDSTRING]
。这对我不起作用,我尝试了
Meteor.Collection.ObjectID('[IDSTRING]')但没有帮助
    'Submit form' : function () {
        var id = this._id;      
        return EventList.find({_id : id}).fetch();
    }