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