【问题标题】:Getting the position of specific words in documents in mongoDB获取特定单词在 mongoDB 文档中的位置
【发布时间】:2026-01-04 21:05:02
【问题描述】:

我使用 $indexOfCP 来定位某些特定单词的索引。 不幸的是,它只返回第一个结果。我想要所有的事件。 另外,$indexOfCP 区分大小写,我希望它不区分大小写。

这是一个例子:

db.inventory.aggregate(
   [
     {
       $project:
          {
            cpLocation: { $indexOfCP: [ "$item", "foo" ] },
          }
      }
   ]
)

{ $indexOfCP: [ "cafeteria", "e" ] } 结果:3

【问题讨论】:

  • 您可以使用$regexFindAll 聚合运算符以不区分大小写的方式查找所有出现的子字符串的索引。

标签: mongodb


【解决方案1】:

您可以使用$regexFindAll,它返回一个数组,其索引在键idx 中。所以你可以像这样添加一个阶段来获取cpLocation.idx

另外添加"options": "i" 正则表达式不区分大小写。

db.collection.aggregate([
  {
    $project: {
      cpLocation: {
        "$regexFindAll": {
          "input": "$item",
          "regex": "e",
          "options": "i"
        }
      },
      
    }
  },
  {
    "$addFields": {
      cpLocation: "$cpLocation.idx"
    }
  }
])

例如here

【讨论】:

  • 谢谢您!如果我只想在特定集合中使用此查询怎么办?
  • 具体收藏是什么意思?此查询在db.yourCollectionNameHere.aggregate() 中指定的集合中完成
  • 对不起,我的意思是如果我想在我的所有收藏而不是特定收藏上使用它。