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.

希望对您有所帮助。