mongodb - 如何使用 mongo 聚合添加自定义字段?
问题描述
我收藏的文档结构如下:
{
"tracking": [
{
"track_id": "abcd",
"track_name": "Sample track"
}, {...}, ...
]
}
我在一个称为跟踪的数组中有多个这样的对象。现在我正在尝试使用 mongo 聚合添加一个名为current_status的字段,如下所示:
{
"$addFields": {
"current_status": {
"$cond": {
"if": {"tracking.track_id": {"$in": ['abcd']}},
"then": "Approved",
"else": "Pending"
}
}
}
}
运行此程序后,我收到以下错误:
pymongo.errors.OperationFailure: Invalid $addFields :: caused by :: FieldPath field names may not contain '.'.
我想根据跟踪数组中是否存在带有 track_id abcd的对象,在 Mongo 聚合查询的结果中添加一个新字段。
解决方案
尝试这个:
db.collection.aggregate([
{
"$addFields": {
"tracking": {
"$map": {
"input": "$tracking",
"as": "item",
"in": {
"$cond": {
"if": { "$eq": ["$$item.track_id", "abcd"] },
"then": {
"track_id": "$$item.track_id",
"track_name": "$$item.track_name",
"current_status": "Approved"
},
"else": {
"track_id": "$$item.track_id",
"track_name": "$$item.track_name",
"current_status": "Pending"
}
}
}
}
}
}
}
])
输出:
{
"_id" : ObjectId("604f50859ee8b82dd8cd9f4a"),
"tracking" : [
{
"track_id" : "abcd",
"track_name" : "Sample track 1",
"current_status" : "Approved"
},
{
"track_id" : "fdsdf",
"track_name" : "Sample track 2",
"current_status" : "Pending"
}
]
}
推荐阅读
- docker - docker容器中的WSO2 API MANAGER apis数据持久性
- serialization - java.util.ConcurrentModificationException 在stormcrawler中向元数据添加一些键
- python - 当我尝试打开文件时未定义变量
- python - 是否可以将函数内的变量从一个 python 脚本导入另一个 python 脚本?
- python - 为蓝牙通信和绘图寻找合适的编程语言
- javascript - 在 React 项目中创建一个返回布尔值的函数
- c++ - 重载包含 if 语句的运算符时析构函数无法正常工作
- c - 为什么此代码适用于 1 和 2,但输入超过 3 时失败?
- windows - 有没有办法根据窗口样式计算最大化、最小化和关闭按钮的数量?
- python - 绘制成本函数并查看迭代中的每个 theta 值