首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新Mongo子文档给定的子文档标准

更新Mongo子文档给定的子文档标准
EN

Stack Overflow用户
提问于 2014-07-25 15:36:34
回答 1查看 91关注 0票数 0

鉴于收集了下列物品:

代码语言:javascript
复制
/* 0 */
{
    "_id" : "0",
    "itemName" : "item1",
    "person" : 
    {
        "name" : "a"
    }
}
/* 1 */
{
    "_id" : "1",
    "itemName" : "item2",
    "person" : 
    {
        "name" : "a"
    }
}
/* 2 */
{
    "_id" : "2",
    "itemName" : "item3",
    "person" : 
    {
        "name" : "b"
    }
}

如何将名为"a“的人更新为"a2"?

这不管用:

代码语言:javascript
复制
db.items.update(
    { "person.name" : "a" },
    { $set :{ "person.name" :"a2"} }
)

UPDATE实际上,上面的工作,但它只适用于第一个记录。向此传递多个参数将更新所有这些参数。

这给了我一个错误:“隐性异常:不能拥有。在字段名person.name”。

代码语言:javascript
复制
db.items.update(
    { "person.name" : "a" },
    { "person.name" : "a2"}
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-25 16:07:55

根据您提供的更新信息,如果项集合中的文档如下所示:

代码语言:javascript
复制
{
    "_id" : "0",
    "itemName" : "item1",
    "person" : 
    {
        "name" : "a"
    }
}

然后,通过运行以下命令,可以将所有命名为"a“的人的名称更新为"b”:

代码语言:javascript
复制
db.items.update({ "person.name" : "a" }, { "$set" : { "person.name" : "b" } }, { "multi" : true });

这将匹配name字段中的值"a“的所有人员,将该字段的值设置为"b”,并通过将multi选项设置为true将其应用于所有文档。否则,将只更新第一次匹配。

命令db.items.update({ "person.name" : "a" }, { "person.name" : "a2"} );给出了一个错误,因为使用这个语法,update()所做的是用指定为第二个参数的文档替换整个匹配的文档。因此,它拒绝此更新,认为您希望用包含字段person.name的文档替换为值"a2“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24959398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档