gpt4 book ai didi

regex - MongoDB 为搜索引擎编写查询

转载 作者:可可西里 更新时间:2023-11-01 10:42:32 28 4
gpt4 key购买 nike

我正在尝试在 MongoDB 中编写一个搜索脚本,但不知道该怎么做......我不想做的事情如下......

让我有一个字符串数组 XD = {"the","new","world"}

现在我想在 MongoDB 文档(使用正则表达式)中搜索字符串数组 XD 并获取结果文档。例如..

{ _id: 1, _content: "there was a boy" }
{ _id: 2, _content: "there was a boy in a new world" }
{ _id: 3, _content: "a boy" }
{ _id: 4, _content: "there was a boy in world" }

现在我想得到符合_content的结果包含字符串数组XD中的字符串

{ _id: 2, _content: "there was a boy in a new world", _times: 3 }
{ _id: 4, _content: "there was a boy in world", times: 2 }
{ _id: 1, _content: "there was a boy", times: 1 }

作为第一个文档 (_id : 2 ) 包含所有三个 { "the"in there, "new"as new, "world"as world } 所以它得到了3

第二个文档(_id: 4) 只有两个{ "world"as world } 所以它得到了2

最佳答案

这是您可以执行的操作。

创建一个正则表达式来匹配_content

XD = ["the","new","world"];
regex = new RegExp(XD.join("|"), "g");

在服务端存储一个JS函数,将_contentXD进行匹配,并返回匹配的个数

db.system.js.save(
{
_id: "findMatchCount",
value : function(str, regexStr) {
XD = ["the","new","world"];
var matches = str.match(regexStr);
return (matches !== null) ? matches.length : 0;
}
}
)

将函数与 mapReduce 一起使用

db.test.mapReduce(
function(regex) {
emit(this._id, findMatchCount(this._content, regex));
},
function(key,values) {
return values;
},
{ "out": { "inline": 0 } }
);

这将产生如下输出:

{
"results" : [
{
"_id" : 1,
"value" : 1
},
{
"_id" : 2,
"value" : 1
},
{
"_id" : 3,
"value" : 1
},
{
"_id" : 4,
"value" : 1
}
],
"timeMillis" : 1,
"counts" : {
"input" : 4,
"emit" : 4,
"reduce" : 0,
"output" : 4
},
"ok" : 1
}

我不确定这个解决方案的效率如何,但它确实有效。

希望这对您有所帮助。

关于regex - MongoDB 为搜索引擎编写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35284319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com