我有一个操作,我试图使用$or
运算符限制集合的结果,但是我有多个字段需要使用此功能。
请参阅下面的查询:
db.items.find({//"isDeleted":false,
"$or":[
{"$and":[{"passages.fleschKincaid.readingEase":{"$gte":90}}]},
{"$and":[{"passages.fleschKincaid.readingEase":{"$gte":60}},{"passages.fleschKincaid.readingEase":{"$lte":70}}]},
{"$and":[{"passages.fleschKincaid.readingEase":{"$gte":50}},{"passages.fleschKincaid.readingEase":{"$lte":60}}]}
],
"$or":[{"$and": [{"contentBanks":{$in: element.statusIds}}]}]})
第一个条件循环并根据某些条件添加 gte/lte 运算符,第二个或我在这里使用的条件是在 for 循环中,它$and
为每个 new推送一个额外的contentBank
。每个只需要满足其中一个条件即可显示为结果,但contentBank
和passages.fleschKincaid.readingEase
是互斥的,因此它们不能组合在同一个 $or 组中。
即 - 如果我有一个项目,为了满足我在上面示例中的条件,它需要一个readingEase
分数,比如说 55,并且有一个contentBank
in statusIds
。它需要同时满足这两个条件,但要$or
单独检查。
我最终得到的是一个覆盖书面条件并将其视为一个 big 的查询$or
,返回可能匹配一个contentBank
但不在readingEase
范围内的结果。
任何帮助将不胜感激。我正在用 javascript、mongoose 和 mongodb 编写这个。如果您知道一种让查询分别处理它们的方法,那就太好了。
ps - 我试图避免它塞满$and
运算符,但如果这是唯一的方法,我可以找到一种方法来创建一个全新的对象并将其添加。唯一的问题是复杂性增加了很多,因为管道运算符都是动态构建的 - 因此$and
包装所有内容的额外运算符将需要大量的更改/开销才能正常工作。