0

我是 MongoDB 的新手,可能是一个菜鸟问题。

我想在 MongoDB 中使用聚合计算“消息”字段中“lupoK”重复的次数:“第一个 lupoK lupoK ”,我使用的是 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***"
        }
    ]
}

提前致谢!!!

4

1 回答 1

1

这适用于mongo shell(假设该message字段是一个字符串并且存在):

db.test.aggregate( [
  { 
      $project: { 
          _id: 0, 
          message: 1, 
          count: { 
              $subtract: [ 
                  { $size: { $split: [ "$message", "lupoK" ] } }, 1 
              ] 
          } 
      } 
  }
] )


笔记:

$split 操作根据分隔符拆分消息字符串 - 在这种情况下,分隔符是“lupoK”。拆分返回一个由“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 ", "." ]
于 2019-12-18T13:55:57.860 回答