use*_*ser 5 mongodb mongodb-query
如果有人提出这个问题,我会事先道歉,我没有找到答案就进行了搜索.
我想在MongoDB中进行搜索,然后创建索引并执行类似的操作
db.myCollection.runCommand( "text", { search: "myWord" } )
Run Code Online (Sandbox Code Playgroud)
这很好用.
我也可以
db.myCollection.runCommand( "text", { search: "myWord1 myWord2" } )
Run Code Online (Sandbox Code Playgroud)
它会搜索两个单词.
我可以通过询问找到两个单词来进行上述搜索吗?(我知道我可以搜索第一个单词然后搜索结果中的第二个单词,但我想知道是否有更好的方法).
此外,是否可以指定要拒绝的单词(例如,搜索单词"test",而不是"testing").
我想知道我是否可以在不使用外部工具的情况下在mongoDB中执行此操作.
Nei*_*unn 13
您可以使用一些选项来进行文本搜索以满足这些需求.请考虑以下文件:
{ "text" : "cake" }
{ "text" : "sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale" }
{ "text" : "dress sale" }
{ "text" : "cake sale monday" }
Run Code Online (Sandbox Code Playgroud)
词的默认"名单"是一个或包容性,但如果你wan't的和包容你"报价"的话:
db.words.find( { "$text": { "$search": "\"cake\" \"sale\"" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale monday" }
Run Code Online (Sandbox Code Playgroud)
如果要排除单词,则前缀为-:
db.words.find( { "$text": { "$search": "\"cake\" \"sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
Run Code Online (Sandbox Code Playgroud)
如果你想将其中的一部分作为一个确切的短语,那么你"引用"整个短语:
db.words.find( { "$text": { "$search": "\"cake sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
Run Code Online (Sandbox Code Playgroud)
虽然词干有问题,所以:
db.words.find( { "$text": { "$search": "test -testing" } },{_id: 0})
Run Code Online (Sandbox Code Playgroud)
实际上不会返回结果.
有关$text示例,请参阅运算符文档.目前并非所有人都在那里,但它正在变得更好.