MongoDB:$或全文搜索和$ in

时间:2014-09-30 08:29:33

标签: javascript mongodb search

问题

您好。我认为这是一个奇怪的问题而且我对此感到茫然:

我们采取:

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

现在,以下查询正常工作:

db.entries.find({ $or: [ {$text:search} ] })

还有这个:

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 个答案:

答案 0 :(得分: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添加索引。