gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:07:04 25 4
gpt4 key购买 nike

我正在尝试检查 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com