使用 $cond 运算符在我的 mongo 查询中添加一个字段
Posted
技术标签:
【中文标题】使用 $cond 运算符在我的 mongo 查询中添加一个字段【英文标题】:Adding a field in my mongo query using $cond operator 【发布时间】:2021-06-12 13:39:07 【问题描述】:我有一个文档集合,其中一些文档已归档 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 部分中。
【问题讨论】:
您使用的是哪个 MongoDB 版本? 我认为它低于版本 4,大约在 3.4 或 3.6 左右 您要更新数据库中的现有文档吗? 不,我不想更新它们 【参考方案1】:试试这个:
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"
【讨论】:
以上是关于使用 $cond 运算符在我的 mongo 查询中添加一个字段的主要内容,如果未能解决你的问题,请参考以下文章