ton*_*lin 4 php database mongodb
MongoDB更新嵌套数组中的字段
如何在照片数组中将"播放"设置为"播放照片"?
我只知道它的_id.
"_id": ObjectId("4f41a5c7c32810e404000000"),
"albums": [
{
"_id": ObjectId("4f545d1bc328103812000000"),
"name": "album1" ,
"photos":[{
"_id": ObjectId("4f545d1bc328103812d00000"),
"name":"travel photo"
},{
"_id": ObjectId("4f545d1bc328103812c00000"),
"name":"play"
}]
},
{
"_id": ObjectId("4f545f56c328103c12000000"),
"name": "album2"
},
{
"_id": ObjectId("4f545f68c328103012000000"),
"name": "album3"
},
{
"_id": ObjectId("4f546642c328103c12000001"),
"name": "album4"
}]
Run Code Online (Sandbox Code Playgroud)
你不能.位置运算符仅适用于文档层次结构中的第一个数组.因此,您无法操纵更深层的nester数组的各个元素.
这是一个已知问题,计划在此开发:https://jira.mongodb.org/browse/SERVER-831
在那段时间之前,你必须将你的架构标准化一点我害怕.
此问题已得到解决.在嵌套的对象数组中更新字段的功能在MongoDB 3.6+版本中可用.在这里查看位置运算符(全部和带标识符).
//Update all docs in collection matching photo name "play" to "play photo"
db.collectioname.update(
{},
{ $set: { "albums.$[].photos.$[photo_field].name": "play photo" } },
{ arrayFilters: [ {"photo_field.name": "play"} ], multi: true}
);
//Update this specific doc given in question matching photo name "play" to "play photo"
db.collectioname.update(
{"_id" : ObjectId("4f41a5c7c32810e404000000")},
{ $set: { "albums.$[].photos.$[photo_field].name": "play photo" } },
{ arrayFilters: [ {"photo_field.name": "play"} ]}
);
Run Code Online (Sandbox Code Playgroud)
这是为了MongoDB 3.6之后来到这里的人们的帮助
| 归档时间: |
|
| 查看次数: |
5585 次 |
| 最近记录: |