thank you for the reply. But if replace $in with $or the query works as expected, field order does not matter any more. I am sure there is reason but it is not obvious and i want to know it.