【问题标题】:How to sort mongo docs with an array of elements by mongoose model如何通过猫鼬模型对具有元素数组的mongo文档进行排序
【发布时间】:2025-12-12 12:20:16
【问题描述】:
我正在使用 mongodb 并使用 mongoose 来操作数据库。
这里我有一组文档,我想按数组中元素的数量对它们进行排序。
有没有办法在 mongoose 中按数组长度对它们进行排序?
以下是 db 的示例。我想按标签数量对它们进行排序。 OR by likeBy 的数量(这是一个 userId 的数组)
【问题讨论】:
标签:
node.js
mongodb
sorting
mongoose
【解决方案1】:
您可以创建一个辅助字段来按该字段排序,如下所示:
- 首先
$addFields 使用$size 创建辅助字段,其值为数组大小。
- 然后按该值排序
- 和
$project 不显示辅助字段。
db.collection.aggregate({
"$addFields": {
"aux_size": {
"$size": "$tags"
}
}
},
{
"$sort": {
"aux_size": 1
}
},
{
"$project": {
"aux_size": 0
}
})
例如here
另外,如果你使用猫鼬,我认为你不需要这个,因为模型说tags 字段必须是一个数组。但如果tags 字段可能是另一种类型(字符串、数字、布尔值...),您可以使用$isArray 将该文档设置为长度为0(例如here)或过滤它们(例如here )