【发布时间】:2018-03-27 16:59:03
【问题描述】:
我有一个包含时间戳字段 (TIMESTAMPVALUE) 的集合,我想对其进行投影,以便仅从时间戳中提取小时。问题是某些时间戳为空。查询是:
db.collections.aggregate([
{
$project : {
hour: {$hour: "$TIMESTAMPVALUE"},
(...some other projections...)
}
}
])
当我运行这个时,我得到一个错误:
{ "serverUsed" : "localhost:27017" , "ok" : 0.0 , "errmsg" : "无法从 BSON 类型 null 转换为 Date" , "code" : 16006 , "codeName" : "Location16006" }
有没有一种简单的方法来更改此聚合,以便我在结果的hour 字段中得到空值,正如人们合理预期的那样,而不是使整个查询失败,最好是比将其拆分为两个管道更简单的方法,一个处理空值,另一个处理非空值,然后加入结果?我正在使用 MongoDB 3.4。
【问题讨论】:
-
我正在考虑它,但我不确定这是否会有所帮助 -
$ifNull不能用作三元运算符,我需要类似于timestamp==null ? null : hour(timestamp)但 MongoDB 的 @987654326 @ 只能用不同的值替换空值,所以我只能将空时间戳转换为非空时间戳,但这不是我需要的。$ifNotNull实际上会有所帮助,但似乎没有这样的事情:)
标签: mongodb