python - 如果 Mongo 中两个日期之间存在任何数据,则返回 true 或 false

标签 python mongodb mongodb-query pymongo aggregation-framework

我正在尝试检查 Mongo 中两个日期之间是否存在任何日期(我正在使用 pymongo)。

id_categoria    = 885
min_date        = parse("2015-11-01")
max_date        = parse("2015-11-20")
query_mongo     = {"categoryId" : id_categoria,"dataDate":{"$lte":max_date,"$gte":min_date}}

print colLastData.find(query_mongo,projection={'data':0}).count()

打印返回这两个日期之间的数据总数,例如,如果我在 2015-11-01 和 2015-11-20 之间只有 10 天,则打印将返回 10。但我需要的是打印返回错误,因为我有 10 天没有数据。

2015年11月1日至2015年11月10日:有数据!
2015-11-11 至 2015-11-20 :没有数据!

我用这个,但是同一件事:

print colLastData.find(query_mongo,projection={'data':0}).count() > 0

如果范围在 Mongo 中只有一天,则打印将返回 True,这是错误的,因为我想要的是仅当 mongo 在所有这些天之间都有数据时才返回 True!

<小时/>

更新1: 我觉得这个查询可以与 OR 配合使用。

query_mongo     = {"categoryId" : id_categoria,"dataDate":{"$lte":max_date,"$gte":min_date}}

因为显示这两个日期之间的“任何”数据,但我需要的是“AND”。如果有一天没有数据,查询必须返回 False。

最佳答案

您似乎想要的基本想法是确保返回的天数与范围内的所有天数连续。这意味着“计算”结果范围之间数据中“不同”的天数等于日期本身之间的天数。

为此,您可以使用 .aggregate() 语句:

days = (datetime.strptime(max_date,"%Y-%d-%m")-datetime.strptime(max_date,"%Y-%d-%m")).days

colLastData.aggregate([
    { "$match": { 
        "categoryId" : id_categoria,
        "dataDate": { "$lte":max_date, "$gte":min_date }
    }},
    { "$group": {
        "_id": {
            "$subtract": [
                { "$subtract": [ "$dataDate", datetime.datetime.utcfromtimestamp(0) ] },
                { "$mod": [
                    { "$subtract": [ "$dataDate", datetime.datetime.utcfromtimestamp(0) ] },
                    1000 * 60 * 60 * 24
                ]}
            ]
        }
    }},
    { "$group": { 
        "_id": None,
        "count": { "$sum": 1 }
    }},
    { "$match": { "count": days } }
])

只有当不同天数等于输入日期之间的天数时,查询才会返回结果。

MongoDB 查询本身不会遍历集合对象以进行相互比较。因此,标准查询无法判断源范围的数据结果中没有“缺失天数”。

但是您可以使用 .aggregate() 等工具创建语句,以便在服务器上为您计算出该逻辑。这基本上是在制作 $group将四舍五入的日期值计算到一天的开始,然后再次使用 $group 来计算这些出现次数。如果出现 $match 与日期之间的差异,则所有日期都存在。

关于python - 如果 Mongo 中两个日期之间存在任何数据,则返回 true 或 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35418616/

相关文章:

python - 在不同的目录中创建一个 excel 文件

mongodb - 如何 'explain' 一个runCommand?

javascript - 为什么使用子字符串方法时应用程序挂起?

mongodb - 有没有办法过滤 mongodb 中的嵌入数组?

javascript - 高效查找和替换文档中的字符串

python - Python 中的内存流

python - 使用 NEOS 作为 Pyomo 求解器

Python:如何在循环中结束程序?

mysql - MySQL频繁删除和插入记录的解决方法

mongodb - Mongoexport shell 脚本 - 查询错误