mongodb元素匹配和更新查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb元素匹配和更新查询相关的知识,希望对你有一定的参考价值。
我有一个名为users
的集合,详情如下
[{
"userId": "00UPQAARGT7",
"userPreferences": [{
"pId": "59SDS64675A00096D48CB",
"pData": [{
"name": "FORMAT",
"value": "CSV"
},
{
"name": "LAN",
"value": "E"
}
]
},
{
"pId": "59SDS64675A00096D59DB",
"pData": [{
"name": "FORMAT",
"value": "DOC"
},
{
"name": "LAN",
"value": "N"
}
]
}
]},
{
"userId": "02UPQAARST7",
"userPreferences": [
{
"pId": "59SDS64675A00096D48DB",
"pData": [{
"name": "FORMAT",
"value": "CSV"
},
{
"name": "LAN",
"value": "N"
}
]
},
{
"pId": "59SDS64675A00096D59DB",
"pData": [{
"name": "FORMAT",
"value": "PPT"
},
{
"name": "LAN",
"value": "N"
}
]
}
]}
]
我想将userPreferences.pData.value
设置为"TAB"
,其中userPreferences.pData.name
是"FORMAT"
和userPreferences.pData.value
到"FRN"
,其中userPreferences.pData.name
是"LAN"
但是想要应用条件userId
在["00UPQAARGT7", "02UPQAARST7"]
和userPreferences.pId
在["59SDS64675A00096D48CB","59SDS64675A00096D59DB"]
任何帮助如何在mongodb中进行单一查询
我正在使用mongodb 3.4.1版本
答案
您不能以您希望的方式执行此操作,原因有两个:
- 在MongoDB 3.4中,positional operator '$'仅匹配第一个找到的子文档。这已在v3.6中进行了更改,您现在可以使用$[]语法来定位所有匹配的子文档。
- 截至今天,您无法在任何版本的MongoDB中指定条件更新。但是有一个开放的功能要求:https://jira.mongodb.org/browse/SERVER-6566
所以你基本上留下了在客户端进行更改的旧的(不幸的是更慢)替代方案,你可以找到大量的例子,例如:这里:
MongoDB update multiple subdocuments with or query
Update all sub-documents inside document mongodb
以上是关于mongodb元素匹配和更新查询的主要内容,如果未能解决你的问题,请参考以下文章