Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何使用mongo聚合添加自定义字段?_Mongodb_Mongodb Query_Aggregation Framework_Pymongo_Pymongo 3.x - Fatal编程技术网

Mongodb 如何使用mongo聚合添加自定义字段?

Mongodb 如何使用mongo聚合添加自定义字段?,mongodb,mongodb-query,aggregation-framework,pymongo,pymongo-3.x,Mongodb,Mongodb Query,Aggregation Framework,Pymongo,Pymongo 3.x,我收藏的文档结构如下所示: { "tracking": [ { "track_id": "abcd", "track_name": "Sample track" }, {...}, ... ] } { "$addFields": {

我收藏的文档结构如下所示:

{
    "tracking": [
        {
            "track_id": "abcd",
            "track_name": "Sample track"
        }, {...}, ...
    ]
}
        {
            "$addFields": {
                "current_status": {
                    "$cond": {
                        "if": {"tracking.track_id": {"$in": ['abcd']}},
                        "then": "Approved",
                        "else": "Pending"
                    }
                }
            }
        }
我在一个叫做跟踪的数组中有多个这样的对象。现在,我尝试使用mongo聚合添加一个名为current_status的字段,如下所示:

{
    "tracking": [
        {
            "track_id": "abcd",
            "track_name": "Sample track"
        }, {...}, ...
    ]
}
        {
            "$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 '.'.
我想在我的Mongo聚合查询结果中添加一个新字段,该字段基于跟踪数组中是否存在跟踪id为abcd的对象。

尝试以下操作:

db.collection.aggregate([
{
“$addFields”:{
“跟踪”:{
“$map”:{
“输入”:“$tracking”,
“作为”:“项目”,
“在”:{
“$cond”:{
“if”:{“$eq”:[“$$item.track_id”,“abcd”]},
“然后”:{
“跟踪id”:“$$item.track\u id”,
“track_name”:“$$item.track_name”,
“当前状态”:“已批准”
},
“其他”:{
“跟踪id”:“$$item.track\u id”,
“track_name”:“$$item.track_name”,
“当前_状态”:“待定”
}
}
}
}
}
}
}
])
输出:

{
“_id”:ObjectId(“604f50859ee8b82dd8cd9f4a”),
“跟踪”:[
{
“轨道id”:“abcd”,
“轨道名称”:“示例轨道1”,
“当前状态”:“已批准”
},
{
“跟踪id”:“fdsdf”,
“轨道名称”:“示例轨道2”,
“当前_状态”:“待定”
}
]
}

尝试使用“tracking$track\u id”无效,将抛出以下错误pymongo.errors.OperationFailure:Invalid$addFields::caused by::Expression$in正好接受2个参数。使用
“if”:{“$in”:[“$tracking.track_id”,['abcd']},
您混合并感谢@WernfriedDomscheit,感谢您回复Dheemanth,但我从上面的评论中得到了我的答案