MongoDB文本索引中如何匹配含动态字符串的精确短语?
解决Node.js中MongoDB精确短语文本搜索的转义问题
这个问题我之前也碰到过,核心是你在Node.js里对双引号的转义处理错了——MongoDB的文本搜索要精确匹配短语,需要的是"cake sale"这样的字符串,但你原来的写法生成的是\"cake sale\"(带反斜杠的),MongoDB会把反斜杠当成搜索内容的一部分,自然找不到预期结果。
正确的写法有两种:
方法一:直接用模板字符串包裹双引号
因为模板字符串(反引号)内部的双引号不需要转义,直接把变量用双引号套起来就行:const text = "cake sale"; const query = { "$text": { "$search": `"${text}"` } }; db.words.find(query);这样生成的
$search值就是纯纯的"cake sale",和你在Robo3T里写的完全一致。方法二:提前拼接好搜索短语
先把变量处理成带双引号的字符串,再传入查询:const text = "cake sale"; const exactPhrase = `"${text}"`; // 这里得到的就是"cake sale" db.words.find({ "$text": { "$search": exactPhrase } });
为什么原来的写法不对?
你原来的代码\\"${text}\\",在JavaScript里会被解析成\"cake sale\"——也就是字符串里包含了反斜杠和双引号,MongoDB收到的搜索内容是\"cake sale\",它会尝试搜索带反斜杠的短语,而不是你想要的cake sale精确匹配,所以查不到结果。
内容的提问来源于stack exchange,提问作者Dark Knight
相关产品推荐
相关产品推荐

