在mongodb 4.4中,遇到一个奇怪的事情,在mongodb中使用 $convert 将一个double 值转换为 date 类型时,值为负数的时候存在onError未生效的情况
-202636829548800000 ,onError 未生效,
-39176725729017600000 ,onError 生效
尝试在$convert中使用 $ifNull,但是当先将字段查询处理,再对字段值 NaN 进行转换时又可以检测到$convert onNull 生效
遇到这种情况,应如何区处理这个 NaN 值
aggregate([ { "$addFields": { "testNumber1_default": { "$convert": { "input": { "$subtract": [ { "$add": [NumberLong("1708617600000"),2*24*60*60000 ] }, { "$multiply": [2345353453,24*60*60000] } ] }, "to": "date", "onError": null, "onNull": null, } }, "testNumber1_double": { "$convert": { "input": { "$subtract": [ { "$add": [Double("1708617600000"),2*24*60*60000 ] }, { "$multiply": [2345353453,24*60*60000] } ] }, "to": "double", "onError": null, "onNull": null } }, "testNumber1_date": { "$convert": { "input": "$testNumber1_double", "to": "date", "onError": null, "onNull": null } }, "testNumber2_double": { "$convert": { "input": { "$subtract": [ { "$add": [Double("1708617600000"),2*24*60*60000 ] }, { "$multiply": [453434345345,24*60*60000] } ] }, "to": "double", "onError": null, "onNull": null } }, "testNumber2_date": { "$convert": { "input": "$testNumber2_double", "to": "date", "onError": null, "onNull": null } } } }, { "$project":{ "testNumber1_default":1, "testNumber1_double":1, "testNumber1_date":1, "testNumber2_double":1, "testNumber2_date":1, } }, { "$skip": 0 }, { "$limit": 1 }])
转换失败,类型还是doublem,而非null或date
在MongoDB中,当你使用 $convert
操作符将一个数值转换为日期时,遇到 NaN 的情况确实有点复杂。因为 NaN 在 MongoDB 中被视为一个特殊的值,它不能被直接转换为日期。
在你的查询示例中,你尝试使用 $subtract
和 $multiply
操作符来生成一个日期值,但是结果有时候是 NaN。当你将 NaN 值作为 $convert
操作符的输入时,它并不会按照 onError
或 onNull
指定的方式处理。
为了处理这种情况,你可以尝试以下几种方法:
$ifNull
操作符: 你可以尝试使用 $ifNull
操作符来处理可能的 NaN 值。例如,你可以先使用 $ifNull
来检查字段值是否为 NaN,如果是,则返回一个特定的值(如 null),然后再进行转换。{ "$convert": { "input": { "$ifNull": ["$yourField", "NaN"] }, "to": "date", "onError": null, "onNull": null }}
$where
操作符: 另一种方法是使用 $where
操作符来过滤掉包含 NaN 值的文档。你可以在聚合管道中添加一个 $where
阶段,用于检查字段值是否为 NaN,如果是,则将其排除。请注意,这些方法可能并不适用于所有情况,具体取决于你的数据和查询需求。在处理 NaN 值时,关键是确保你的查询逻辑能够正确地处理这些异常情况,以避免数据完整性问题或查询结果的不一致性。
查询:{“日期”:{“$GTE”:“2021-07-22T03:00:00”,“$LTE”:“2021-07-23T03:00:00”},“isdeleted”:false},字段:{},排序:{} 将字符串转换为数据格式,如下所示,我只得到时间戳 DateFormat originalFormatData=new SimpleDateFormat(“yyyy-mm-dd't'hh:mm:ss”,
问题内容: 我在mySQL 5.1中有一个数据类型的日期列。如何将其转换为DATE? 这是我到目前为止所拥有的- 得到这个 错误-#1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在’FROM 7 FOR 4附近使用) 请帮忙。 问题答案: 您可以使用MySQL的功能 尽管我怀疑您使用Unix时间戳会更轻松
本文向大家介绍MongoDB如何将出生日期记录转换为年龄,包括了MongoDB如何将出生日期记录转换为年龄的使用技巧和注意事项,需要的朋友参考一下 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是将出生日期转换为年龄的查询- 这将产生以下输出-
问题内容: 我有一个二维的numpy数组。此数组中的一些值为。我想使用此数组执行某些操作。例如考虑数组: 我试图每次取一行,以相反的顺序对其进行排序,以从行中获取最多3个值并取其平均值。我试过的代码是: 这不适用于包含的行。我的问题是,是否有一种快速的方法可以将2D numpy数组中的所有值都转换为零,以便我在排序和其他尝试做的事情上没有问题。 问题答案: 这应该工作: 在上述情况下,where_
问题内容: 因此,我在MongoDB转储中有大量的.bson。我在命令行上使用bsondump,将输出作为stdin传递到python。这可以成功地将BSON转换为“ JSON”,但实际上它是一个字符串,似乎不是合法的JSON。 例如,输入行如下所示: 我相信的是Mongo Extended JSON 。 当我在这样一行中阅读并执行以下操作时: 我得到: 哪一个还是。 我也尝试过 (请参阅pymo
问题内容: 给定一年和一个日历周,我如何获得该周的星期二作为日期? 问题答案: 给定您和(日历周)作为变量(例如,从SELECT语句中获取),您可以通过以下方式获取DATE: 该短语重复;不想存储变量。SQL语句在MySQL上对我来说效果很好。 更新: 只是为了澄清:将产生一周的第一天。从中减去一个数字(星期二为-1;星期三为-2,依此类推,将为您选择一周中的特定日期)。看这里。