【问题标题】:How to match exact phrase with dynamic string in text index Mongodb?如何在文本索引Mongodb中将精确短语与动态字符串匹配?
【发布时间】:2020-01-30 23:09:53
【问题描述】:

我有这个问题

db.words.find({ "$text": { "$search": "\"cake sale\"" } }) // gives expected answer in robo3T

现在我的text 搜索是动态的

const text = "cake sale"
db.words.find({ "$text": { "$search": `\\"${text}\\"` } })

但它并没有给我预期的 nodejs 输出。那么如何在这里解析反斜杠呢?

【问题讨论】:

  • 您在第二个示例中的反引号之后有一个额外的引号。所以你搜索的是“cake sale”而不是“cake sale”
  • 您的查询与文档中显示的语法不匹配:docs.mongodb.com/manual/text-search db.stores.find( { $text: { $search: "\"coffee shop\"" } } ) 末尾有一个额外的双引号。所以只需在末尾添加最后一个"
  • @nopassport1 是的,你是对的。但是你还能告诉我如何使用动态字符串来做到这一点吗?
  • 我猜:db.words.find({ "$text": { "$search": "\\"${text}\\""` } })`?但是您的搜索查询应该只是“蛋糕销售”
  • @nopassport1 不...我的查询应该是\"cake sale\"

标签: node.js mongodb mongodb-query


【解决方案1】:

您的查询不正确。您需要更改查询

db.words.find({ "$text": { "$search": `"\"${text}\"` } })

db.words.find({ "$text": { "$search": `\"${text}\"` } })

因为,在第一个反引号之后的开头有一个额外的双引号 (")。这样做将修复您的查询。

简单说明:

console.log("\"cake sale\"");

var text = "cake sale";
console.log(`\"${text}\"`);
// both the console.log gives same result

【讨论】:

  • 没有日志应该显示“蛋糕销售” – 黑暗骑士 8 分钟前删除
  • 可能没有被标记为正确答案,但这对我有用。谢谢。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2016-05-23
  • 2017-10-15
  • 2019-02-11
相关资源
最近更新 更多