Mongodb 使用$cond运算符在我的mongo查询中添加字段

Mongodb 使用$cond运算符在我的mongo查询中添加字段,mongodb,mongodb-query,aggregation-framework,pymongo,pymongo-3.x,Mongodb,Mongodb Query,Aggregation Framework,Pymongo,Pymongo 3.x,我有一个文档集合,其中一些文档已归档atd,而另一些文档在嵌套的seave\u details字段中有etd,例如: [ { “_id”:ObjectId(“…”), “航行详情”:{ “atd”:“21年3月15日” } }, { “_id”:ObjectId(“…”), “航行详情”:{ “etd”:“21年3月15日” } } ] 现在,我想编写一个mongo聚合查询,其中我根据一个条件创建一个新字段,如果文档中有keyatd,那么我想在该新字段中添加keyatd的值,如果该键不在文档中

我有一个文档集合,其中一些文档已归档
atd
,而另一些文档在嵌套的
seave\u details
字段中有
etd
,例如:

[
{
“_id”:ObjectId(“…”),
“航行详情”:{
“atd”:“21年3月15日”
}
},
{
“_id”:ObjectId(“…”),
“航行详情”:{
“etd”:“21年3月15日”
}
}
]
现在,我想编写一个mongo聚合查询,其中我根据一个条件创建一个新字段,如果文档中有key
atd
,那么我想在该新字段中添加key
atd
的值,如果该键不在文档中,那么在该新字段中添加key
etd
的值

我编写了一个类似这样的聚合查询,以根据
atd
etd
添加一个新字段,这两个字段中的任何一个都存在于
voyage\u details
对象中:

{
“$addFields”:{
“航行日期”:{
“$cond”:{
“if”:{“voyage_details.atd”:{“$exists”:True},
“然后”:“$voyage\u details.atd”,
“else”:“$voyage\u details.etd”
}
}
}
}
有谁能指导我编写正确的查询,在我的mongo聚合中添加一个新字段,这样我就可以使用atdetd这两个字段中的任何一个出现在voyage_details部分中。

尝试以下操作:

db.collection.aggregate([
{
“$addFields”:{
“航行日期”:{
“$ifNull”:[“$voyage\u details.atd”,“$voyage\u details.etd”]
}
}
}
]);
输出:

/*1创建日期:2021年3月15日,下午3:36:19*/
{
“_id”:ObjectId(“604f319b9ee8b82dd8cd9f3f”),
“航行详情”:{
“atd”:“21年3月15日”
},
“开航日期”:“21年3月15日”
},
/*创建日期:2021年3月15日,下午3:36:19*/
{
“_id”:ObjectId(“604f319b9ee8b82dd8cd9f40”),
“航行详情”:{
“etd”:“21年3月15日”
},
“开航日期”:“21年3月15日”
}

您使用的是哪个MongoDB版本?我认为它低于版本4,大约在3.4或3.6左右。是否要更新数据库中的现有文档?不,我不想更新它们