我坚持使用mongo聚合查询 . 现在我有一个集合,其中包含各种用户的帖子(其详细信息存在于用户集合中) .
我需要一个查询来获取每个用户的一个帖子(如SQL中的group by)
POSTS collection data
{
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'
}
Here is my query
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) });
Desired Output
{
language:'english',
status:'A',
desc:'Hi there',
userId:'5b891370f43fe3302bbd8918',
ownerData:[[object]]
},{
language:'english',
status:'A',
desc:'Hi there - 3'
userId:'5b891370f43fe3302bbd8001',
ownerData:[[object]]
}
3 回答
$group :将作为mysql的分组 . $first :将从组中获取集合字段的第一个元素 . $lookup 充当mysql中的连接 .
此外,您可以使用
group
和$last
您可以将$group聚合阶段用于distinct
userId
,然后使用$lookup获取用户数据 .