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,但我从上面的评论中得到了我的答案