node.js - 为集合中的每个博主选择最新帖子

标签 node.js mongodb mongoose

那么,假设我有 3 个博主。他们每个人都有很多帖子。

我想为他们每个人选择最新的帖子。

目前我有这个伪代码:

Bloggers.find({name: {$in: ['John','Mike','Arny']}}, (err, bloggers) => {
    bloggers.forEach( blogger => {
        blogger.latest_post = Posts.find({author: blogger.name}).sort({date: -1}).limit(1);
    })
    displayItSomehow(bloggers);
})

在这里,博主的名字就是一个群组的名字。每个组都有很多文档,但根据某些标准我只需要一个。

像这样的博主合集:

{name: 'John', id: 1},
{name: 'Mike', id: 2},
{name: 'Arny', id: 3}

帖子集合:

{ title: 'title1', text: 'blablabla', date: 111, author: 1 },
{ title: 'Nowadays football became...', text: 'blablabla', date: 112, author: 1 },
{ title: 'title1', text: 'blablabla', date: 113, author: 2 },
{ title: 'The story of my neighbor starts when...', text: 'blablabla', date: 114, author: 2 },
{ title: 'title1', text: 'blablabla', date: 115, author: 3 },
{ title: 'title1', text: 'blablabla', date: 116, author: 3 },
{ title: 'Business and success are always were...', text: 'blablabla', date: 117, author: 3 }

结果应该是这样的:

John:     'Nowadays football became...'

Mike:     'The story of my neighbor starts when...'

Arny:     'Business and success are always were...'

那么,我该如何在 mongoose 中实际解决我的问题呢?一次查询就可以吗?

最佳答案

查询population是你要找的:

Bloggers
    .find({name: {$in: ['John','Mike','Arny']}})
    .populate({
        path: 'posts',
        options: {
            limit: 1,
            sort: {date: -1}
        }
    })
    .exec((err, bloggers) => {
        displayItSomehow(bloggers);
    })
})

这里是填充函数的配置对象的文档链接:http://mongoosejs.com/docs/api.html#model_Model.populate

这只有在您相应地定义您的 Bloggers 架构时才有效:

var bloggerSchema = Schema({
    _id     : Number,
    name    : String,
    // all your other fields...
    posts: [{ type: Schema.Types.ObjectId, ref: 'Post' }]
});

关于node.js - 为集合中的每个博主选择最新帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979913/

相关文章:

javascript - 如何使用 JOI 验证来验证嵌套 json 对象的某些字段

node.js - 如何在运行浏览器脚本之前设置 process.env?

java - 使用 spring mongoTemplate 进行条件/最大 mongo 查询

javascript - Node/Express API 路由中正确且可持续的错误处理方式

node.js - 使用 bluebird 与 socket.io 不起作用

node.js - 很难理解 Node.js 的异步操作

java - 将值从 Mono/Flux 传递到方法

node.js - 如何使用 mongoose 一次返回 25 个结果

node.js - Mongoose:设置双向引用

javascript - Mongoose - 当从集合中返回所有项目(没有搜索参数)时,从集合中返回的项目不包含其 mongo _id