在MongoDB中,如果你想要按逗号分隔字符串的长度进行聚合查询,你可以使用$split
操作符来分割字符串,然后使用$size
操作符来获取数组的长度。以下是一个示例查询,它将按逗号分隔的字符串字段tags
的长度进行分组,并计算每个长度组的文档数量。
db.collection.aggregate([
{
$project: {
tagLength: { $size: { $split: ["$tags", ","] } }
}
},
{
$group: {
_id: "$tagLength",
count: { $sum: 1 }
}
},
{
$sort: { _id: 1 }
}
])
$split
操作符。$size
操作符。如果你在执行上述查询时遇到问题,可能的原因包括:
tags
字段在所有文档中都存在。tags
字段有时是字符串,有时是数组,可能会导致问题。可以使用$ifNull
和$isArray
来处理这种情况。db.collection.aggregate([
{
$addFields: {
tagsArray: {
$cond: {
if: { $isArray: "$tags" },
then: "$tags",
else: { $split: ["$tags", ","] }
}
}
}
},
{
$project: {
tagLength: { $size: "$tagsArray" }
}
},
{
$group: {
_id: "$tagLength",
count: { $sum: 1 }
}
},
{
$sort: { _id: 1 }
}
])
这个修改后的查询首先检查tags
字段是否为数组,如果不是,则将其分割成数组。这样可以确保所有文档都有一致的格式进行聚合操作。
领取专属 10元无门槛券
手把手带您无忧上云