mongodb 主串中子串出现次数的聚合
Aggregation for counting the occurrence of sub-string in main string in mongodb
我是 MongoDB 的新手,可能是个菜鸟问题。
我想计算消息字段中 "lupoK" 重复的次数 - "message" : "first lupoK lupoK" 在 MongoDB 中使用聚合,我使用的是 studio3t 接口。
我的文档结构是 -
{
"_id" : ObjectId("5df9c780b05196da93be262b"),
"id" : "61a4c53a-aa99-4336-ab4f-07bb7f618889",
"time" : "00:00:45",
"username" : "siul",
"message" : "***first lupoK lupoK***",
"emoticon_place" : [
{
"_id" : "128428",
"begin" : NumberInt(6),
"end" : NumberInt(10)
}
],
"fragments" : [
{
"text" : "first "
},
{
"emoticon" : {
"emoticon_id" : "128428",
"emoticon_set_id" : ""
},
"text" : "***lupoK***"
},
{
"emoticon" : {
"emoticon_id" : "128428",
"emoticon_set_id" : ""
},
"text" : "***lupoK***"
}
]
}
提前致谢!!!
这适用于 mongo shell(假设 message
字段是一个字符串并且存在):
db.test.aggregate( [
{
$project: {
_id: 0,
message: 1,
count: {
$subtract: [
{ $size: { $split: [ "$message", "lupoK" ] } }, 1
]
}
}
}
] )
备注:
$split 操作根据定界符拆分消息字符串 - 在这种情况下,定界符是 "lupoK"。拆分 returns 由 "lupoK" 分隔的标记数组。因此,令牌数减去 1,得到使用次数 "lupoK",即 "lupoK".
的出现次数
使用这些示例消息字符串检查结果:
"***first lupoK lupoK***"
"lupoKlupoK"
" lupoK lupoK "
""
"lupoKlupoKlupoK"
"lupoK"
"HELLO * lupoK* WORLD"
"HELLO WORLD"
"***first lupoK lupoKlupoK lupoK***lupoK *** last lupoK."
例如,某些字符串的标记:
"***first lupoK lupoK***"
生成这三个标记:[ "***first", " ", "***" ]
"HELLO * lupoK* WORLD"
有这两个标记:[ "HELLO * ", "* WORLD" ]
"***first lupoK lupoKlupoK lupoK***lupoK *** last lupoK."
有七个标记:[ "***first ", " ", "", " ", "***", " ***last ", "." ]
我是 MongoDB 的新手,可能是个菜鸟问题。
我想计算消息字段中 "lupoK" 重复的次数 - "message" : "first lupoK lupoK" 在 MongoDB 中使用聚合,我使用的是 studio3t 接口。
我的文档结构是 -
{
"_id" : ObjectId("5df9c780b05196da93be262b"),
"id" : "61a4c53a-aa99-4336-ab4f-07bb7f618889",
"time" : "00:00:45",
"username" : "siul",
"message" : "***first lupoK lupoK***",
"emoticon_place" : [
{
"_id" : "128428",
"begin" : NumberInt(6),
"end" : NumberInt(10)
}
],
"fragments" : [
{
"text" : "first "
},
{
"emoticon" : {
"emoticon_id" : "128428",
"emoticon_set_id" : ""
},
"text" : "***lupoK***"
},
{
"emoticon" : {
"emoticon_id" : "128428",
"emoticon_set_id" : ""
},
"text" : "***lupoK***"
}
]
}
提前致谢!!!
这适用于 mongo shell(假设 message
字段是一个字符串并且存在):
db.test.aggregate( [
{
$project: {
_id: 0,
message: 1,
count: {
$subtract: [
{ $size: { $split: [ "$message", "lupoK" ] } }, 1
]
}
}
}
] )
备注:
$split 操作根据定界符拆分消息字符串 - 在这种情况下,定界符是 "lupoK"。拆分 returns 由 "lupoK" 分隔的标记数组。因此,令牌数减去 1,得到使用次数 "lupoK",即 "lupoK".
的出现次数使用这些示例消息字符串检查结果:
"***first lupoK lupoK***"
"lupoKlupoK"
" lupoK lupoK "
""
"lupoKlupoKlupoK"
"lupoK"
"HELLO * lupoK* WORLD"
"HELLO WORLD"
"***first lupoK lupoKlupoK lupoK***lupoK *** last lupoK."
例如,某些字符串的标记:
"***first lupoK lupoK***"
生成这三个标记:[ "***first", " ", "***" ]
"HELLO * lupoK* WORLD"
有这两个标记:[ "HELLO * ", "* WORLD" ]
"***first lupoK lupoKlupoK lupoK***lupoK *** last lupoK."
有七个标记:[ "***first ", " ", "", " ", "***", " ***last ", "." ]