MongoDB:$or、全文搜索和$in

9

问题

你好。我有一个对我来说似乎很奇怪的问题,我感到很困惑:

让我们来看看:

tags   = [ ObjectId('a'), ObjectId('b') ]
search = { $search: 'abc' }

现在下面的查询可以正常工作:
db.entries.find({ $or: [ {$text:search} ] })

And this one too:

db.entries.find({ $or: [ {tags:{$in:tags}} ] })

但是将它们结合起来:
db.entries.find({ $or: [ {$text:search}, {tags:{$in:tags}} ] })

我遇到了以下错误:

Unable to execute query: error processing query: ns=db.entries
Tree:
  $or
    tags $in [ ObjectId('a'), ObjectId('b') ]
    TEXT : query=abc, language=, tag=NULL
Sort: {}
Proj: {}
 No query solutions

元数据

  • 我正在使用MongoDB版本2.6.4
  • 将任何条件与简单的{_id:“c”}表达式组合都可以正常工作。
  • 我已经正确设置了文本索引。
  • 条件在$or数组中出现的顺序不会影响结果。

我的问题

能帮帮忙吗?:(

1个回答

8
在稍微不同的环境下运行查询会产生更明确的错误信息:
Runner error: BadValue error processing query: ns=webistor.entries limit=0 skip=0
Tree: $or
    tags $in [ ObjectId('a') ObjectId('b') ]
    TEXT : query=abc, language=, tag=NULL
  Sort: {}
  Proj: {}

planner returned error: Failed to produce a solution for TEXT under OR - other non-TEXT clauses under OR have to be indexed as well.

注意

OR 条件下的其他非 TEXT 子句也必须进行索引

显然我需要为 tags 添加一个索引。


兄弟,我也遇到了同样的问题,但我的问题是我有3个字段都使用复合索引(用户名、名字和姓氏)作为文本索引,但当我在文本搜索中使用or和用户名时,只有结果。如果我使用名字或姓氏或所有3个字段进行文本搜索,我会得到与你一样的错误。你能帮忙吗? - Pran R.V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接