我正在尝试根据多种条件进行搜索,但问题是这样做并不像这样。
假设我有一个像
这样的搜索查询 Orders.find({$or: {"status":{"$in":["open", "closed"]},"paymentStatus":{"$in":["unpaid"]}}}
)
并且我添加了另一个过滤器参数,例如approvalStatus
它不会留下以前找到的项目,而是将查询视为AND
,如果其中一个查询确实会返回一个空的项集合不匹配。
如何编写一个查询,无论传递给它的是什么,即使其中一个条件中没有记录,它也会保留以前找到的项目。
像sql中的简单OR查询
我希望我能够解释得这么好
答案 0 :(得分:2)
这里使用$or
是正确的方法,但它的值必须是查询表达式的数组,而不是对象。
所以你的查询看起来应该是这样的:
Orders.find({$or: [
{"status": {"$in": ["open", "closed"]}},
{"paymentStatus": {"$in": ["unpaid"]}},
{"approvalStatus": {"$in": ["approved"]}}
]})