MongoDB项目转化为数组

标签 mongodb aggregation-framework

我有对象数组(嵌套),我想从这些嵌套对象中提取几个元素,并在数组中返回这些字段。以下是我的文档结构(从原始数据中模拟)

"detailLine": [
    {
        "name": "first",
        "value": {
            "lineNumber": 1,
            "subLineCode": " ",
            "detailLineCharges": {
                "allowedAmount": {
                    "amount": "11111",
                    "reasonCode": “aaaah”
                }
            }
        }
    },
    {
        "name": "first",
        "value": {
            "detailLineCharges": {
                "allowedAmount": {
                    "amount": "22222",
                    "reasonCode": “BBBB”
                }
            }
        }
    }
]

我希望看到这样的结果

details: [
  {
    amount:”11111”,
    reasonCode : “aaaah”
  },
  {
    amount : “22222”,
    reasonCode : “BBBB”
  }
]

我试过了

 db.collection.aggregate([
   {
     $match: {
       _id: "123456"
     }
   }, 
   {
     $project: {
       details: {
         $push {
           amount: "$detailLine.value.detailLineCharges.allowedAmount.amount",
           reasoncode: "$detailLine.value.detailLineCharges.allowedAmount.reasonCode"
         }
       }
     }
   }
])

但是我收到了这个错误

Error: command failed: { "ok" : 0, "errmsg" : "invalid operator '$push'", "code" : 15999 } : aggregate failed :

我想使用 $project 因为我正在使用它来拉取太多其他字段,所以这就是为什么我没有为这个特定场景尝试 $group 的原因。

任何人都可以帮助如何在数组中获取这两个字段?

最佳答案

好吧,您所需要的只是 $project 您的文档并使用 $map 运算符“ reshape ”它们。

db.coll.aggregate( 
    [ 
        { "$match": { "_id": "123456" } },
        { "$project": { 
            "detailLine": { 
                "$map": { 
                    "input": "$detailLine", 
                    "as": "dline", 
                    "in": { 
                        "amount": "$$dline.value.detailLineCharges.allowedAmount.amount", 
                        "reasonCode": "$$dline.value.detailLineCharges.allowedAmount.reasonCode" 
                    } 
                } 
           } 
        }} 
    ]
)

关于MongoDB项目转化为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130049/

相关文章:

regex - 具有计数和条件的不同值 mongoDB

node.js - 为什么从 MongoDB 读取所有数据时回调永远不会被调用?

mongodb - 如何获得 MongoDB 计数的解释?

javascript - 如何计算mongodb中两个集合中一个字段的不同值的数量

mongodb - 根据 mongodb 中的积分查找用户排名

mongodb - 在聚合管道、MapReduce 或 runCommand 中使用存储的 JavaScript 函数

mongodb - 使用聚合获取另一个字段的记录

php - 比较 MongoDB 中的文档

mongodb - 如果在数组中找不到匹配项,则返回第一个元素

node.js - 在对话中获取最新消息