Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 从给定的字符串数组中查找一个单词_Mongodb - Fatal编程技术网

Mongodb 从给定的字符串数组中查找一个单词

Mongodb 从给定的字符串数组中查找一个单词,mongodb,Mongodb,假设我们有一个用户给定的数组: q = ['dolor', 'sed'] 我的数据库中的一项是: {//data, 'paragraphs' : [{ 'header' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam venenatis lectus risus, a interdum lectus rhoncus sed. Vestibulum sit amet massa eu metus iaculi

假设我们有一个用户给定的数组:

q = ['dolor', 'sed']
我的数据库中的一项是:

{//data,
 'paragraphs' : [{ 'header' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam venenatis lectus risus, a interdum lectus rhoncus sed. Vestibulum sit amet massa eu metus iaculis laoreet et non est. ',
                 //mode data
                 },
                 { .. }]
}
我想知道“段落.标题”中是否有单词
dolor
sed


我尝试了
$in
搜索
,但没有成功。我应该使用什么?

感染性的方法是使用正则表达式:

db.foo.find({"paragraphs.header": {$in: [/dolor/, /sed/]}})
因为这些都没有锚定在字符串的开头,这意味着您不能使用索引,您必须执行完全扫描以查找匹配的文档

如果你想要有效的方法,你应该看看

  • 使用
    --setParameter textSearchEnabled=true启动mongod
  • 创建文本索引
    db.foo.ensureIndex({“段落.标题”:“文本”})
  • search
    db.foo.runCommand(“text”{search:“dolor sed”})

您可以在创建文本索引或运行
text
命令时指定语言,但不幸的是;)

如果你想要一个性能合理的解决方案,你应该使用一个真正的文本搜索引擎。此查询不适合MongoDB。即使是2.6版本的全文支持(现在正在预览中)与完整版本相比,功能也会有限。所以MongoDB对于这种操作来说是个坏主意。你的建议是什么?MySql?不,类似ElasticSearch或Solr(两者都是一个叫做Lucene的普通搜索引擎上的服务层)。从来都不喜欢拉丁语:),不过我查看了文档,发现了。所以我猜正则表达式很慢(也需要cpu?),但文本搜索又快又大。没错。如果您需要全文搜索功能,MongoDB可以很好地与ElasticSearch配合使用。