php - 使用另一个字段作为值将计算字段添加到每个数组元素
问题描述
结构:
"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": [
{
"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"}}
解决方案
这对于标准投影是不可能的,因为它是一个数组。您必须使用数组运算符$map
来设置数组元素。
就像是
db.collection.aggregate([
...other stages..
{"$addFields":{
"Files":{
"$map":{
"input":"$Files",
"in":{
"Locale": "$$this.Locale",
"FileExtension": "$$this.FileExtension",
"Number":"$$this.FileExtension"
}
}
}
}}
])
推荐阅读
- here-api - {状态:401,消息:“无效的 app_id app_code 组合”}
- python - 熊猫,紧凑的数据框 - 合并多列
- gsm - 我可以将 Android 下载到 GSM 套件吗?
- python - 使用 SQLAlchemy 和 Flask 时数据库存储在哪里?
- javascript - 如何知道哪个站点正在运行我的模块?
- php - echo 和 return 有什么区别
- coq - 我可以在 coq 中打印未完成证明的部分定义吗?
- kubernetes - 在同一个 pod 的所有容器上设置相同的环境变量
- java - 如何放心发送-d信息?
- excel - VBA 解析 XML api URL