您可以使用过滤后的位置运算符$[<identifier>] 来发挥作用。
假设当前集合如下所示:
{
"relationships" : [
{
"rel_name": "HAS_TAG",
"rel_destination": "TAG"
},
{
"rel_name": "HAS_CORE_TAG",
"rel_destination": "TAG"
},
{
"rel_name": "HAS_CORE_TAG",
"rel_destination": "TAG1"
},
{
"rel_name": "HAS_CORE_TAG",
"rel_destination": "TAG2"
}
]
},
{
"relationships" : [
{
"rel_name": "HAS_TAG",
"rel_destination": "TAG"
}
]
}
以下查询会有所帮助:
db.collection.update(
{'relationships.rel_name': 'HAS_CORE_TAG'},
{$set: {'relationships.$[elem].rel_name': 'HAS_NEW_TAG'}},
{multi:true, arrayFilters: [
{'elem.rel_name': 'HAS_CORE_TAG'}
]}
)
现在,集合将如下所示:
{
"relationships" : [
{
"rel_name": "HAS_TAG",
"rel_destination": "TAG"
},
{
"rel_name": "HAS_NEW_TAG",
"rel_destination": "TAG"
},
{
"rel_name": "HAS_NEW_TAG",
"rel_destination": "TAG1"
},
{
"rel_name": "HAS_NEW_TAG",
"rel_destination": "TAG2"
}
]
},
{
"relationships" : [
{
"rel_name": "HAS_TAG",
"rel_destination": "TAG"
}
]
}
您可以在here阅读更多内容。