mongoDB - 计算2个字符串中的常用单词

时间:2016-01-17 18:15:11

标签: javascript mongodb

假设我有一些文档,在MongoDB中有这些信息:

{
text: "this is the first this is"
content: "this is this is"
total: 0
}

我想计算“text”中每个单词在“content”中出现多少次,将所有计数结果加起来并放入“total”字段。

在上面的示例中:

'this'在内容中出现两次,'is':2,'the':0,'first':0,'this':2,'is':2

总计:2 + 2 + 0 + 0 + 2 + 2 = 8 所以我们想在现场“总计”中加上8个

我知道我应该通过迭代集合(让我们称之为'文档')来做到这一点:

db.documents.find().forEach(
    function(result)
    {
    ... 
    })

不确定要放入什么内容(我是新手,还是JS)

p.s:它应该是区分大小写的。

1 个答案:

答案 0 :(得分:1)

好吧,看看JS + MongoDB教程。您需要访问MongoDB shell或MongoDB GUI(RoboMongo)才能执行。您可以创建新功能,根据您的规则计算内容字段中的文本,并将新字段添加到文档中。

String.prototype.total = function(content) {
    var result     = 0;
    var contentArr = content.split(" ");
    var textArr    = this.split(" ");
    for(var i = 0; i < textArr.length; i++) {
        for(var j = 0; j < contentArr.length; j++) {
            result += textArr[i] === contentArr[j] ? 1 : 0;
        }
    }
    return result;
}

db.documents.find().forEach(function(doc){
    doc["total"] = doc["text"].total(doc["content"]);
    print(doc);
    // Save again with total value
    //db.documents.save(doc);
})
  

结果:

{
    "_id" : ObjectId("569c0be30586bcb40f7d253a"),
    "text" : "this is the first this is",
    "content" : "this is this is",
    "total" : 8
}