这是我的mongodb中的数据
db.test.insert([
{ "modelo" : "S10 P-Up Executive 2.4 MPFI F.Power CD" },
{ "modelo" : "SANDERO STEPWAY Hi-Power 1.6 8V 5p" },
{ "modelo" : "Gol (novo) 1.6 Power/Highi T.Flex 8v 4P" }
])
此文档有一个文本索引。
db.test.createIndex( { modelo: "text" } )
此查询带来了所有数据,这是正确的。 db.test.find({$ text:{$ search:" Gol power"}})
但是,我想知道是否有办法将两个单词都放在里面的文件。对于此示例,而不是返回all,它将只返回一个:
{ "modelo" : "Gol (novo) 1.6 Power/Highi T.Flex 8v 4P" }
我试图用聚合而不是find来做。但是我没有成功。 有什么建议怎么做?
答案 0 :(得分:1)
方法1:
$ search中给出的默认值将被视为OR运算符,这就是您获取所有记录的原因,我们需要提供如下所示的查询以使$ search为AND运算符取得给定的单词
db.test.find( { $text: { $search: "\"Gol\" power" } } )
结果是
{ "_id" : ObjectId("5a20fa66bf339f14930eb0ae"), "modelo" : "Gol (novo) 1.6 Power/Highi T.Flex 8v 4P" }
如果$ search字符串包含短语和单个术语,则文本搜索将仅匹配包含该短语的文档。更具体地,搜索执行短语与搜索字符串中的各个词的逻辑AND。请参阅$text
方法2:
或者,我们可以使用$regex以其他方式实现它。它的速度要慢得多,因为它可以完全收集扫描,但它可以提供更大的灵活性,例如:考虑到单词的顺序。
检索所需结果的示例查询,其中Gol
严格出现在power
之前:
db.test.find({modelo:{$regex: /Gol.*power/, $options: "si"}});
结果是
{ "_id" : ObjectId("5a20fa66bf339f14930eb0ae"), "modelo" : "Gol (novo) 1.6 Power/Highi T.Flex 8v 4P" }
db.test.find({$ text:{$ search:“Gol power”}})带来所有数据的原因是带有OR条件的单词。