9

The problem

Hi. I have what seems to me as a strange problem and I'm at a loss with it:

Let's take:

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

Now the following query works fine:

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

And this one too:

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

But combine them:

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

And I get the following error:

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

Meta-data

  • I'm using MongoDB version 2.6.4.
  • Combining either of the conditions with a simple {_id:"c"} expression works fine.
  • I do have my text-indices set up properly.
  • The order in which the conditions appear in the $or-array doesn't influence the outcome.

My question

Help? :(

Avaq
  • 3,009
  • 1
  • 21
  • 25

1 Answers1

8

Running the query under a slightly different environment produced a much more clear error:

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.

Note

Other non-TEXT clauses under OR have to be indexed as well

Apparently I'll have to add an index to tags.

Avaq
  • 3,009
  • 1
  • 21
  • 25
  • Bro i have same issue, but my problem here is i have 3 fields all have indexed as text using compound index(username, first_name, last_name) but when i use or with text search and username then onli i am getting the result. If i use text search with first_name or last_name or all 3 fields i get same error as yours. Can you help – Pran R.V Oct 11 '19 at 07:14