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