node.js - 如何在MongoDB中聚合不同的数组字段
问题描述
我有这个架构
const GroupSchema = new Schema({
id: { type: String },
users: [{ type: Number }],
status: { type: Boolean }
},
{
timestamps: true
});
我尝试聚合按创建日期排序的不同用户值。例子
{
"users": [1111, 2222],
"createdAt": {
"$date": "2020-09-30T10:51:33.058Z"
}
}
{
"users": [1111, 2222],
"createdAt": {
"$date": "2020-09-29T10:51:33.058Z"
}
}
我尝试:
Group.aggregate([
{ "$sort": { "createdAt": -1 } },
{ $group : { _id : "$users" }}, //, created : { $last : "created" }
{ $match : { users : {$in : [1111] } }}
])
我预计
{
"users": [1111, 2222],
"createdAt": {
"$date": "2020-09-30T10:51:33.058Z"
}
}
我该如何解决?谢谢。
解决方案
你可以试试,
$match
你的情况$sort
由 createdAt 日期$group
通过 users 数组并获取 latestDoc 中的最新文档$replaceWith
替换 root 中的 latestDoc
db.collection.aggregate([
{ $match: { users: { $in: [1111] } } },
{ $sort: { createdAt: -1 } },
{
$group: {
_id: "$users",
latestDoc: { $first: "$$ROOT" }
}
},
{ $replaceWith: "$latestDoc" }
])
推荐阅读
- java - Spring Boot 从 YAML(属性)文件中读取数组
- android - Android 构建不适用于 WSL
- visual-studio-code - VSCode 不适用于文件观察器
- c# - AsEnumerable() 为什么这不像在 VB 中那样工作
- sharepoint - 如何使用 Sharepoint 框架在我自己的 webpart 上调整突出显示的内容 webpart?
- java - 在 JAVA 中提取 JAR 时的文件命名问题
- javascript - JavaScript - 不活动后从视频循环返回时出错
- excel - 对单元格求和,直到相邻单元格不为空
- http - http.ListenAndServe:程序退出时关闭
- python - 如何在python代码中添加特定的bin宽度