Node.js Mongoose 按字段列出所有文档
Node.js Mongoose list all document by field
我有一个简单的应用程序,它的博客。
这是我在 mongoose 中的模式
var blogSchema = new Schema({
title: String,
author: String,
body: String
});
var Blog = mongoose.model('Blog', blogSchema);
我要显示所有博客post
这是我的溃败:
app.get('/', function(req, res, next) {
Blog.find(function (err, post) {
res.render('default',{data: post});
});
});
到现在为止一切正常,我的 post 的显示列表采用 json 风格。
当我只想显示标题时,我将 {data: post}
更改为 {data: post.title}
它不显示任何内容。
您正在从您的博客 collection 中返回 collection 的 post 秒。没关系 - 但是,听起来您正在寻找的是显示单个项目。
您需要像这样引用它(return 第一个 post 的标题):
app.get('/', function(req, res, next) {
Blog.find(function (err, posts) {
res.render('default',{data: posts[0].title});
});
});
或者您需要创建一个新端点来获取单个项目:
app.get('/', function(req, res, next) {
Blog.find(function (err, posts) {
res.render('default',{data: posts});
});
});
app.get('/post/:postId', function(req, res, next) {
Blog.findOne({_id: req.param('postId')}, function (err, post) {
res.render('default',{data: post.title});
});
});
与底部的不同之处在于我正在创建一个命名路由,它接受一个名为 postId
的参数,然后我将其传递给 Mongoose 方法,然后数据库尝试找到一个 post 与 _id
= :postId
。所以如果我打电话:
http://example.com/post/123
- :postId 参数将等于 123
.
您在 Express 中使用以下语法访问请求参数:
req.param('nameOfParam')
。在这个例子中,我使用了 req.param('postId')
。 :
将自动为您删除。
第二个例子也使用了 findOne()
,它只根据一组标准为你检索一行(在这种情况下,给我找一个带有 _id = :postId 的行),而不是比 collection.
编辑: 回答关于获取最后十个 post 的问题,您可以使用与之前相同的代码,但稍作改动:
app.get('/', function(req, res, next) {
Blog.find().limit(10).sort('id').exec(function (err, posts) {
res.render('default',{data: posts});
});
});
然后您可以在视图文件中呈现标题。如果您希望 data
只包含 post 标题,您可以这样做:
app.get('/', function(req, res, next) {
Blog.find().limit(10).sort('id').exec(function (err, posts) {
var postTitles = posts.map(function(post) { return post.title; });
res.render('default',{lastPostTitles: postTitles});
});
});
See the documentation on Mongoose Queries for more information.
希望对您有所帮助。
我有一个简单的应用程序,它的博客。
这是我在 mongoose 中的模式
var blogSchema = new Schema({
title: String,
author: String,
body: String
});
var Blog = mongoose.model('Blog', blogSchema);
我要显示所有博客post 这是我的溃败:
app.get('/', function(req, res, next) {
Blog.find(function (err, post) {
res.render('default',{data: post});
});
});
到现在为止一切正常,我的 post 的显示列表采用 json 风格。
当我只想显示标题时,我将 {data: post}
更改为 {data: post.title}
它不显示任何内容。
您正在从您的博客 collection 中返回 collection 的 post 秒。没关系 - 但是,听起来您正在寻找的是显示单个项目。
您需要像这样引用它(return 第一个 post 的标题):
app.get('/', function(req, res, next) {
Blog.find(function (err, posts) {
res.render('default',{data: posts[0].title});
});
});
或者您需要创建一个新端点来获取单个项目:
app.get('/', function(req, res, next) {
Blog.find(function (err, posts) {
res.render('default',{data: posts});
});
});
app.get('/post/:postId', function(req, res, next) {
Blog.findOne({_id: req.param('postId')}, function (err, post) {
res.render('default',{data: post.title});
});
});
与底部的不同之处在于我正在创建一个命名路由,它接受一个名为 postId
的参数,然后我将其传递给 Mongoose 方法,然后数据库尝试找到一个 post 与 _id
= :postId
。所以如果我打电话:
http://example.com/post/123
- :postId 参数将等于 123
.
您在 Express 中使用以下语法访问请求参数:
req.param('nameOfParam')
。在这个例子中,我使用了 req.param('postId')
。 :
将自动为您删除。
第二个例子也使用了 findOne()
,它只根据一组标准为你检索一行(在这种情况下,给我找一个带有 _id = :postId 的行),而不是比 collection.
编辑: 回答关于获取最后十个 post 的问题,您可以使用与之前相同的代码,但稍作改动:
app.get('/', function(req, res, next) {
Blog.find().limit(10).sort('id').exec(function (err, posts) {
res.render('default',{data: posts});
});
});
然后您可以在视图文件中呈现标题。如果您希望 data
只包含 post 标题,您可以这样做:
app.get('/', function(req, res, next) {
Blog.find().limit(10).sort('id').exec(function (err, posts) {
var postTitles = posts.map(function(post) { return post.title; });
res.render('default',{lastPostTitles: postTitles});
});
});
See the documentation on Mongoose Queries for more information.
希望对您有所帮助。