首页 > 解决方案 > MongoDB Java 条件查找

问题描述

我有一个 mongoDB ( 集合,其中的文档可能包含两个日期dateAdateB。这些日期不能保证设置,并且可以为空。

我想写一个查找查询,它表示:

    if dateA is not null:
            if dateA is less than someArbitraryDate
    or
    if dateB is not null:
            if dateB is less than someArbitraryDate

看着这个答案,我知道我可能需要使用$exprand $cond。我只是不确定如何编写查找。

标签: mongodb

解决方案


您不需要$expr$cond您所说的简单用例。我们可以用 just 来达到同样的效果$or

查询将类似于:

db.collection.find({
    "$or": [
        {"dateA": {"$exists": true, "$ne": null, "$lt":  ISODate("<YYYY-mm-ddTHH:MM:ss>")}},
        {"dateB": {"$exists": true, "$ne": null, "$lt":  ISODate("<YYYY-mm-ddTHH:MM:ss>")}},
    ]
})

此处$exists确保该字段存在,$ne: null确保该值不为空,然后与日期字符串的小于匹配将在您编写的一个 if-if 块中为您提供所需的内容

将它们组合在一起$or只会组合每个dateAdateB匹配的结果。

阅读更多关于运营商的信息:https ://docs.mongodb.com/manual/reference/operator/query-comparison/


推荐阅读