【发布时间】:2018-09-27 01:45:04
【问题描述】:
我有一个包含多个文档的集合(称为客户端),每个文档代表一个客户端。每个客户端文档都包含一个 phoneNumber 文档数组。我想更新我收藏的所有客户端文档中的所有 phoneNumber 文档,以便为每个 phoneNumber 文档添加一个 readOnly 属性。
挑战在于,某些 phoneNumber 文档有一个 readOnly 属性,我认为这让我感到厌烦......
以下示例 JSON 文档;
{
"_id" : ObjectId("5baa8e5da61b7842284937b7"),
"clientID" : "00001",
"firstName" : "Jonathan",
"middleName" : "Herbert",
"lastName" : "Alexander",
"dateOfBirth" : "1965-04-04",
"email" : "jonalex@hcare.com",
"phoneNumbers" : [
{
"phoneID" : "001",
"number" : "(404) 242-5939",
"phoneType" : "HOME"
},
{
"phoneID" : "001",
"number" : "(404) 242-5939",
"phoneType" : "HOME"
"readOnly" : true
},
{
"phoneID" : "001",
"number" : "(404) 242-5939",
"phoneType" : "HOME"
}
],
"gender" : "M"
}
在本例中,我希望所有 phoneNumber 文档都具有 readOnly:false 属性。
我尝试过使用以下...
db.Clients.update(
{},
{ $set: { "phoneNumbers.$[].readOnly" : true } },
{ multi: true}
)
...但它给了我一个关于不打算使用该部分遍历元素的错误,所以我被卡住了。
如何更新此集合中的所有文档以将 readOnly 字段添加到每个文档的嵌套 phoneNumbers 数组中的所有元素?
【问题讨论】:
-
您的
update很好(在 MongoDB 4.0 上测试)。我想您需要将您的 mongodb 更新到更高版本 -
请同时发布错误和版本
-
您在第二个元素中缺少一个昏迷,电话号码数组中的索引 1,在 phoneType 字段之后,我尝试了它并且工作正常。
-
我收到的错误是“没有使用部分(phoneNumbers of phoneNumbers.$[].readOnly)来遍历元素({phoneNumbers: [ { phoneID: "001", number: "(404 ) 242-5939", phoneType: "HOME" } ]})" 我在 MongoDB 3.4 上运行。
-
您需要将您的mongodb版本更新到3.6才能使用
$[]全位置运算符
标签: json mongodb mongodb-query