您好。我认为这是一个奇怪的问题而且我对此感到茫然:
我们采取:
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
2.6.4
。{_id:"c"}
表达式结合使用就可以了。$or
- 数组中的顺序不会影响结果。帮助? :(
答案 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
添加索引。