node.js - 如何使用 mongoDb 获取字符串中关键字的出现次数

标签 node.js mongodb mongoose full-text-search find-occurrences

我在下面的聚合中使用 $search 运算符进行文本搜索:
但是我想获得匹配关键字的出现次数(不仅是 mongo 提供的 textScore)

  myCollection= await MyCollection.aggregate(
            [
                {
                    $match: {
                        $text: {
                            $search: `${keyword}`
                        }
                    }
                },
                { $sort: { score: { $meta: "textScore" } } },
                {
                    $project: {
                        _id: 1, score: { $meta: "textScore" },
                        // other fields here
                    }
                },
                { $match: { score: { $gt: 1.0 } } },
                { $limit: 100 },
            ],
        )
我的收藏是这样的:(索引仅供说明)
var myCollectionSchema = mongoose.Schema(

    {  name: String,
       email: String
       description: String
    })
    
myCollectionSchema.index({ 'description': 'text' },{ background:true})
    
mongoose.model('myCollection', myCollectionSchema);
那么如何仅使用 mongo 来实现这样的目标呢?
谢谢

最佳答案

尝试这个:

let keyword = new RegExp("Hi", "i")

db.myCollection.aggregate([
    {
        $addFields: {
            num_of_occ: {
                $size: {
                    $filter: {
                        input: { $split: ["$description", " "] },
                        as: "text",
                        cond: {
                            $regexMatch: { input: "$$text", regex: keyword }
                        }
                    }
                }
            }
        }
    }
]);
输出:
[
  {
    "_id" : ObjectId("6033a3b0406aaa04445434a1"),
    "name" : "Dheemanth",
    "description" : "Everything has hI in it.",
    "num_of_occ" : 2
  },
  {
    "_id" : ObjectId("6033a3b0406aaa04445434a2"),
    "name" : "Heath",
    "description" : "shushi ends with Hi.",
    "num_of_occ" : 2
  },
  {
    "_id" : ObjectId("6033a3b0406aaa04445434a3"),
    "name" : "Abdelmlak",
    "description" : "Hi i am Abdelmlak.",
    "num_of_occ" : 1
  },
  {
    "_id" : ObjectId("6033a3b0406aaa04445434a4"),
    "name" : "Alex",
    "description" : "missing keyword",
    "num_of_occ" : 0
  }
]

关于node.js - 如何使用 mongoDb 获取字符串中关键字的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66275959/

相关文章:

javascript - 如何检查Node js中是否存在模块功能

java - MongoDB 聚合不能使用 $limit 两次

javascript - Node Mongoose 填充条件不返回预期结果

angularjs - express 4 : How do I send JSON object to view?

node.js - 如何让 grunt watch 和 grunt nodemon 一起工作

mongodb - 内部结构的地理空间索引

java - MongoDb GridFs更新Java

node.js - 居住在 Mongoose

javascript - 下划线和 Mongoose : Use document as outer function's return value

node.js - 如何使用 Node.js/Express/MongoDB 向 Google map 添加标记?