在$project中直接使用$cond操作符即可,如下,如果current_operator字段为空或者为空列表,那么就把这个字段展示为["-"]
db.alarm.aggregate([
// {'$match':{"create_time":{"$gt":ISODate("2021-05-12T15:23:12+08:00"),"$lt":ISODate("2021-12-23T17:51:15.964+08:00")}}},
{
'$project': {
"manage_type_name": 1,
"manage_sub_type_name": 1,
"event_status": 1,
"create_time": 1,
"current_operator":
{
$cond:
{
if: {
"$in": ["$current_operator", [null, []]]
},
then: ["-"],
else: "$current_operator"
}
}
}
}
])
比较奇怪的是,$cond下的$if 语句如果,写成如下的形式,和自己预想的判断逻辑有很大差距,所有的字段都会被展示为["-"],暂时不清楚具体的原因。
if: { current_operator: { $in: [null, []] } },