0

我有一个操作,我试图使用$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。每个只需要满足其中一个条件即可显示为结果,但contentBankpassages.fleschKincaid.readingEase是互斥的,因此它们不能组合在同一个 $or 组中。

即 - 如果我有一个项目,为了满足我在上面示例中的条件,它需要一个readingEase分数,比如说 55,并且有一个contentBankin statusIds。它需要同时满足这两个条件,但要$or单独检查。

我最终得到的是一个覆盖书面条件并将其视为一个 big 的查询$or,返回可能匹配一个contentBank但不在readingEase范围内的结果。

任何帮助将不胜感激。我正在用 javascript、mongoose 和 mongodb 编写这个。如果您知道一种让查询分别处理它们的方法,那就太好了。

ps - 我试图避免它塞满$and运算符,但如果这是唯一的方法,我可以找到一种方法来创建一个全新的对象并将其添加。唯一的问题是复杂性增加了很多,因为管道运算符都是动态构建的 - 因此$and包装所有内容的额外运算符将需要大量的更改/开销才能正常工作。

4

0 回答 0