结构:
"entity": [
{
"_id": {
"$oid": "5bbf6e6d69a634eeb5a32a0e"
},
"Extension Id": "PR00027173",
"Files": [
{
"Locale": "en_WW",
"FileExtension": "ai",
"Number": []
},
{
"Locale": "sv_SE",
"Type": "Technical drawing",
"FileExtension": "eps",
"Number": []
}
]
},
{
"_id": {
"$oid": "5bbf6e6d69a634eeb5a32b7c"
},
"Extension Id": "PR00027174",
"Files": [
{
"Locale": "en_WW",
"FileExtension": "ai",
"Number": []
},
{
"Locale": "sv_SE",
"Type": "Technical drawing",
"FileExtension": "eps",
"Number": []
}
]
}
]我希望在Files字段中的每个数组元素中添加计算字段(Number),并将其值设置为来自同一元素(即Type )的其他字段。我使用聚合框架进行了尝试,但每次设置值时,它都会从整个数组获取所有值,即:
"Files": [
{
"Locale": "en_WW",
"FileExtension": "ai",
"Number": [
"ai",
"eps"
]
},
{
"Locale": "sv_SE",
"Type": "Technical drawing",
"FileExtension": "eps",
"Number": [
"ai",
"eps"
]
}
]是否可以将新的字段号值设置为FileExtension,但只能从相同的元素而不是整个数组中设置?这就是我的总体预测结果:
["projection"]=> array(1) {
["Files.Number"]=>
string(29) "$Files.FileExtension"}}发布于 2018-10-25 14:20:50
这与标准投影是不可能的,因为它是一个数组。您必须使用数组运算符$map来设置数组元素。
有点像
db.collection.aggregate([
...other stages..
{"$addFields":{
"Files":{
"$map":{
"input":"$Files",
"in":{
"Locale": "$$this.Locale",
"FileExtension": "$$this.FileExtension",
"Number":"$$this.FileExtension"
}
}
}
}}
])https://stackoverflow.com/questions/52991446
复制相似问题