使用 $cond 运算符在我的 mongo 查询中添加一个字段
Adding a field in my mongo query using $cond operator
我有一个文档集合,其中一些文档已归档 atd
,而其他文档在嵌套字段 voyage_details
中有 etd
,例如:
[
{
"_id" : ObjectId("..."),
"voyage_details" : {
"atd" : "15-Mar-21"
}
},
{
"_id" : ObjectId("..."),
"voyage_details" : {
"etd" : "15-Mar-21"
}
}
]
现在,我想编写一个 mongo 聚合查询,在其中我根据条件创建一个新字段,如果文档中包含键 atd
,那么我想添加该新字段中键 atd
的值,如果文档中不存在该键,则在该新字段中添加键 etd
的值。
我已经编写了这样的聚合查询,以在 atd
或 etd
的基础上添加一个新字段,无论两者中哪个都存在于 voyage_details
对象中:
{
"$addFields": {
"sailing_date": {
"$cond": {
"if": { "voyage_details.atd": { "$exists": True } },
"then": "$voyage_details.atd",
"else": "$voyage_details.etd"
}
}
}
}
任何人都可以指导我编写正确的查询以在我的 mongo 聚合中添加一个新字段,以便我可以使用 atd 或 etd voyage_details 部分中出现的两个字段中的任何一个。
试试这个:
db.collection.aggregate([
{
"$addFields": {
"sailing_date": {
"$ifNull": ["$voyage_details.atd", "$voyage_details.etd"]
}
}
}
]);
输出:
/* 1 createdAt:3/15/2021, 3:36:19 PM*/
{
"_id" : ObjectId("604f319b9ee8b82dd8cd9f3f"),
"voyage_details" : {
"atd" : "15-Mar-21"
},
"sailing_date" : "15-Mar-21"
},
/* 2 createdAt:3/15/2021, 3:36:19 PM*/
{
"_id" : ObjectId("604f319b9ee8b82dd8cd9f40"),
"voyage_details" : {
"etd" : "15-Mar-21"
},
"sailing_date" : "15-Mar-21"
}
我有一个文档集合,其中一些文档已归档 atd
,而其他文档在嵌套字段 voyage_details
中有 etd
,例如:
[
{
"_id" : ObjectId("..."),
"voyage_details" : {
"atd" : "15-Mar-21"
}
},
{
"_id" : ObjectId("..."),
"voyage_details" : {
"etd" : "15-Mar-21"
}
}
]
现在,我想编写一个 mongo 聚合查询,在其中我根据条件创建一个新字段,如果文档中包含键 atd
,那么我想添加该新字段中键 atd
的值,如果文档中不存在该键,则在该新字段中添加键 etd
的值。
我已经编写了这样的聚合查询,以在 atd
或 etd
的基础上添加一个新字段,无论两者中哪个都存在于 voyage_details
对象中:
{
"$addFields": {
"sailing_date": {
"$cond": {
"if": { "voyage_details.atd": { "$exists": True } },
"then": "$voyage_details.atd",
"else": "$voyage_details.etd"
}
}
}
}
任何人都可以指导我编写正确的查询以在我的 mongo 聚合中添加一个新字段,以便我可以使用 atd 或 etd voyage_details 部分中出现的两个字段中的任何一个。
试试这个:
db.collection.aggregate([
{
"$addFields": {
"sailing_date": {
"$ifNull": ["$voyage_details.atd", "$voyage_details.etd"]
}
}
}
]);
输出:
/* 1 createdAt:3/15/2021, 3:36:19 PM*/
{
"_id" : ObjectId("604f319b9ee8b82dd8cd9f3f"),
"voyage_details" : {
"atd" : "15-Mar-21"
},
"sailing_date" : "15-Mar-21"
},
/* 2 createdAt:3/15/2021, 3:36:19 PM*/
{
"_id" : ObjectId("604f319b9ee8b82dd8cd9f40"),
"voyage_details" : {
"etd" : "15-Mar-21"
},
"sailing_date" : "15-Mar-21"
}