我在对具有多个对象数组的子元素进行排序时遇到问题。
例如
集合:对话
[
{
"key" : "value",
"receivers" : [
{ "userId" : 1, "updatedAt" : new Date() },
{ "userId" : 2, "updatedAt" : new Date() }
]
},
{
"key" : "value",
"receivers" : [
{ "userId" : 1, "updatedAt" : new Date() },
{ "userId" : 2, "updatedAt" : new Date() }
]
}
]
现在我根据receivers.userId查找结果
conversation.find( { 'receivers.userId' : 1 } ).sort({ 'receivers.updatedAt' : -1 })
这里我面临的问题是排序。我只需要对来自子数组的 userId = 1 的记录进行排序。目前,如果 userId: 2 有最新的更新日期,那么它首先出现..因为我需要考虑 userId:1 的更新日期
答案 0 :(得分:0)
通过使用聚合,我们可以实现这一点。
db.getCollection('conversations').aggregate([
{
$addFields: {
lastSent: {
$let: {
vars: {
filtered: {
$filter: {
input: "$receivers",
cond: { $eq: ["$$this.userId", 1177947885] }
}
}
},
in: { $max: "$$filtered.updatedAt" }
}
}
}
},
{ $sort: { lastSent: -1 } },
{ $project: { lastSent: 0 } }
])