mongodb元素匹配和更新查询

问题描述 投票:0回答:1

我有一个名为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版本

node.js mongodb mongoose
1个回答
1
投票

您不能以您希望的方式执行此操作,原因有两个:

  1. 在MongoDB 3.4中,positional operator '$'仅匹配第一个找到的子文档。这已在v3.6中进行了更改,您现在可以使用$[]语法来定位所有匹配的子文档。
  2. 截至今天,您无法在任何版本的MongoDB中指定条件更新。但是有一个开放的功能要求:https://jira.mongodb.org/browse/SERVER-6566

所以你基本上留下了在客户端进行更改的旧的(不幸的是更慢)替代方案,你可以找到大量的例子,例如:这里:

MongoDB update multiple subdocuments with or query

Update all sub-documents inside document mongodb

© www.soinside.com 2019 - 2024. All rights reserved.