如何在MongoDB $文本搜索中使用AND和NOT

时间:2014-06-01 23:16:52

标签: mongodb mongodb-query

如果有问题我提前道歉,我没有找到答案就进行了搜索。

我想在MongoDB中进行搜索,并创建索引并执行类似

的操作
db.myCollection.runCommand( "text", { search: "myWord" } )

这很好用。

我也可以

db.myCollection.runCommand( "text", { search: "myWord1 myWord2" } )

它将搜索两个单词。

我可以通过询问找到两个单词来进行上述搜索吗? (我知道我可以搜索第一个单词然后搜索结果中的第二个单词,但我想知道是否有更好的方法。)

此外,是否可以指定要拒绝的单词(例如,搜索单词“test”,而不是“test”)。

我想知道我是否可以在不使用外部工具的情况下在mongoDB中执行此操作。

1 个答案:

答案 0 :(得分:12)

您可以使用一些选项来进行文本搜索以满足这些需求。请考虑以下文件:

{ "text" : "cake" }
{ "text" : "sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale" }
{ "text" : "dress sale" }
{ "text" : "cake sale monday" }

默认"列表"单词是包含,但如果您想要包含,则引用"引用"单词:

db.words.find( { "$text": { "$search": "\"cake\" \"sale\"" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale monday" }

如果您想排除一个字,那么您的前缀为-

db.words.find( { "$text": { "$search": "\"cake\" \"sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }

如果您想将其中的一部分视为确切短语,那么您"引用"整个短语:

db.words.find( { "$text": { "$search": "\"cake sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }

虽然词干有问题,但是:

db.words.find( { "$text": { "$search": "test -testing" } },{_id: 0})

实际上不会返回结果。

有关示例,请参阅$text运算符上的文档。目前并非所有人都在那里,但情况正在好转。