Mongodb 按具有子字段的唯一子字段返回最后一个文档
我正在尝试获取集合中每个用户的最后一个文档,但无法成功检索该文档。我已经在其他帖子中查找过了,但找不到(例如,和) 我的问题是,我无法将字段作为对象返回(我是mongo新手,希望有办法) 我只能返回{title,body,username,avatar}等字段,而不是{title,body,user{username,avatar}} 我的收藏:Mongodb 按具有子字段的唯一子字段返回最后一个文档,mongodb,Mongodb,我正在尝试获取集合中每个用户的最后一个文档,但无法成功检索该文档。我已经在其他帖子中查找过了,但找不到(例如,和) 我的问题是,我无法将字段作为对象返回(我是mongo新手,希望有办法) 我只能返回{title,body,username,avatar}等字段,而不是{title,body,user{username,avatar}} 我的收藏: [{ title: 'title 1', body: 'body 2', user: { username:
[{
title: 'title 1',
body: 'body 2',
user: {
username: 'a',
avatar: 'avatar 1'
}
},
{
title: 'title 2',
body: 'body 2',
user: {
username: 'b',
avatar: 'avatar 2'
}
},
{
title: 'title 3',
body: 'body 3',
user: {
username: 'b',
avatar: 'avatar 2'
}
}]
我想在分组后返回:
[{
title: 'title 1',
body: 'body 2',
user: {
username: 'a',
avatar: 'avatar 1'
}
},
{
title: 'title 3',
body: 'body 3',
user: {
username: 'b',
avatar: 'avatar 2'
}
}]
我尝试过的一个查询示例:
// this only returns the avatar and not the username...
db.collection.aggregate([
{ '$sort': { title: 1 } },
{ '$group': {
_id: '$user.username',
body: { $last: '$body' },
title: { $last: '$title' },
user: { $last: '$user.username', $last: '$user.avatar' }
}}])
// this throws an error saying the field 'user ' must be an accumulator object
db.collection.aggregate([
{ '$sort': { title: 1 } },
{ '$group': {
_id: '$user.username',
body: { $last: '$body' },
user: [ { $last: '$user.username', $last: '$user.avatar' } ]
}}
])
话虽如此,我还想指出,也许团队不是前进的方向。也许mongo有一个我可以使用的
distinct
函数?如果要根据日期筛选数据,请在数据库中添加一个createdAt字段作为时间戳
db.collection.aggregate([
{ "$sort": { "createdAt": 1 } },
{
"$group": {
_id: "$user.username",
body: { $last: "$body" },
title: { $last: "$title" },
user: {
$first: {
username: "$user.username",
avater: "$user.avatar"
}
},
}
}
])
当您搜索它时,总是从集合的最后一个获取数据,如果您想首先获取数据,则需要读取
如果要根据日期筛选数据,请选中“在数据库中添加createdAt字段作为时间戳”
db.collection.aggregate([
{ "$sort": { "createdAt": 1 } },
{
"$group": {
_id: "$user.username",
body: { $last: "$body" },
title: { $last: "$title" },
user: {
$first: {
username: "$user.username",
avater: "$user.avatar"
}
},
}
}
])
当您搜索它时,总是从集合的最后一个获取数据,如果您想首先获取数据,则需要读取
请勾选当您说您希望获得收藏中每个用户的“最后一份”文档时,您指的是时间上的最后一份吗?最后一个是索引?您对“last”的定义是什么?对不起,这个定义将是时间的最后一个文档。我认为mongo创建的ObjectID已经编码了时间戳。所以这也行。最重要的部分是作为对象的返回字段。我想要一个包含另一个字典的字段,而不仅仅是一个字符串当你说你想获得集合中每个用户的“最后一个”文档时,你是说时间是指最后一个吗?最后一个是索引?您对“last”的定义是什么?对不起,这个定义将是时间的最后一个文档。我认为mongo创建的ObjectID已经编码了时间戳。所以这也行。最重要的部分是作为对象的返回字段。我想要一个包含另一个字典的字段,而不仅仅是字符串。我的问题不是筛选/排序。我希望返回一个包含对象的字段,而不是像您在那里看到的那样包含字符串的字段。例如:user:{username:{$first:$user.username},avatar:$user.avatar}我已经根据您的要求更新了我的答案。请检查并让我知道是否有错误。这将返回一个空数组。还有,为什么$project在那里起作用呢?实际上,它起作用了。。。我打错了什么。但我仍然对$1项目感到疑惑。谢谢项目只是删除_id文件,不需要到那个阶段,它只是选择阶段。我的问题不是筛选/排序。我希望返回一个包含对象的字段,而不是像您在那里看到的那样包含字符串的字段。例如:user:{username:{$first:$user.username},avatar:$user.avatar}我已经根据您的要求更新了我的答案。请检查并让我知道是否有错误。这将返回一个空数组。还有,为什么$project在那里起作用呢?实际上,它起作用了。。。我打错了什么。但我仍然对$1项目感到疑惑。谢谢项目只是删除_id文件,不需要那个阶段,它只是选择阶段