【发布时间】:2018-09-20 18:08:40
【问题描述】:
我坚持使用 mongo 聚合查询。现在我有一个集合,其中包含各种用户的帖子(其详细信息存在于用户集合中)。
我需要一个查询来仅获取每个用户的一篇文章(如 SQL 中的 group by)
POSTS 收集数据
{
language:'english',
status:'A',
desc:'Hi there',
userId:'5b891370f43fe3302bbd8918'
},{
language:'english',
status:'A',
desc:'Hi there - 2'
userId:'5b891370f43fe3302bbd8918'
},{
language:'english',
status:'A',
desc:'Hi there - 3'
userId:'5b891370f43fe3302bbd8001'
}
这是我的查询
db.col('posts').aggregate([
{
$match: {
language: 'english',
status: "A"
}
}, {
$sample: { size: 10 }
}, {
$sort: { _id: -1 }
}, {
$lookup: {
from: 'users',
localField: 'userId',
foreignField: '_id',
as: 'ownerData'
}
}], (err, data) => { console.log(err,data) });
期望的输出
{
language:'english',
status:'A',
desc:'Hi there',
userId:'5b891370f43fe3302bbd8918',
ownerData:[[object]]
},{
language:'english',
status:'A',
desc:'Hi there - 3'
userId:'5b891370f43fe3302bbd8001',
ownerData:[[object]]
}
【问题讨论】:
-
按用户分组,并获取每个组的第一个元素
标签: node.js mongodb mongoose aggregation-framework