MongoDB:$或全文搜索和$ in

Ava*_*vaq 9 javascript search mongodb

问题

你好.在我看来,这是一个奇怪的问题,我对此感到茫然:

让我们来:

tags   = [ ObjectId('a'), ObjectId('b') ]
search = { $search: 'abc' }
Run Code Online (Sandbox Code Playgroud)

现在以下查询工作正常:

db.entries.find({ $or: [ {$text:search} ] })
Run Code Online (Sandbox Code Playgroud)

还有这个:

db.entries.find({ $or: [ {tags:{$in:tags}} ] })
Run Code Online (Sandbox Code Playgroud)

但结合它们:

db.entries.find({ $or: [ {$text:search}, {tags:{$in:tags}} ] })
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

元数据

  • 我正在使用MongoDB版本2.6.4.
  • 将任一条件与简单{_id:"c"}表达式组合就可以正常工作.
  • 我确实正确设置了文本索引.
  • 条件出现在$or-array中的顺序不会影响结果.

我的问题

救命?:(

Ava*_*vaq 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.
Run Code Online (Sandbox Code Playgroud)

注意

OR下的其他非TEXT条款也必须编入索引

显然我必须添加一个索引tags.