当前位置:  开发笔记 > 数据库 > 正文

使用MongoDB更新数组字段内的特定键/值

如何解决《使用MongoDB更新数组字段内的特定键/值》经验,为你挑选了1个好方法。

作为序言,我已经和MongoDB一起工作了大约一个星期,所以这可能是一个非常简单的答案.

我已将数据存储在我的集合中,我们将调用此集合content,因为它包含文章,新闻等.其中每个都articles包含另一个数组author,其中包含所有作者的信息(地址,电话,标题等).

目标 - 我正在尝试创建一个查询,该查询将更新作者在特定作者所在的每篇文章上的地址,并且只更新指定的作者块(而不是阵列中存在的其他文章).

对特定文章的"全局更新"进行排序,该文章会影响他/她关于存在的每个内容的信息.

这是一个contentauthor外观相似的例子.

{ 
"_id" : ObjectId("4c1a5a948ead0e4d09010000"), 
"authors" : [
    {
        "user_id" : null,
        "slug" : "joe-somebody",
        "display_name" : "Joe Somebody",
        "display_title" : "Contributing Writer",
        "display_company_name" : null,
        "email" : null,
        "phone" : null,
        "fax" : null,
        "address" : null,
        "address2" : null,
        "city" : null,
        "state" : null,
        "zip" : null,
        "country" : null,
        "image" : null,
        "url" : null,
        "blurb" : null
    },
    {
        "user_id" : null,
        "slug" : "jane-somebody",
        "display_name" : "Jane Somebody",
        "display_title" : "Editor",
        "display_company_name" : null,
        "email" : null,
        "phone" : null,
        "fax" : null,
        "address" : null,
        "address2" : null,
        "city" : null,
        "state" : null,
        "zip" : null,
        "country" : null,
        "image" : null,
        "url" : null,
        "blurb" : null
    },
], 
"tags" : [ 
    "tag1", 
    "tag2", 
    "tag3" 
], 
"title" : "Title of the Article" 
}

我可以通过运行以下命令找到该作者创建的每篇文章:

db.content.find({authors: {$elemMatch: {slug: 'joe-somebody'}}});

所以理论上我应该能够更新authorsslug 的记录joe-somebody但不是jane-somebody(第二作者),我只是不确定你是如何进入并更新该作者的每条记录的.

我以为我走在了正确的轨道上,这就是我尝试过的.

b.content.update(
   {authors: 
     {$elemMatch: 
       {slug: 'joe-somebody'}
     }
   },
   {$set: 
     {address: '1234 Avenue Rd.'}
   },
   false,
   true
);

我只是相信我在$ set语句中缺少一些东西来指定正确的作者并指向正确的数组.有任何想法吗?

**Update**

我现在也试过这个:

b.content.update(
   {authors: 
     {$elemMatch: 
       {slug: 'joe-somebody'}
     }
   },
   {$set: 
     {'authors.$.address': '1234 Avenue Rd.'}
   },
   false,
   true
);

解:

这最终对我有用!

db.content.update({'authors.slug':'joe-somebody'},{$set:{'authors.$.address':'Address That I wanted'}},false,true);

它会正确更新所有记录,谢谢!



1> diederikh..:

也许你可以使用$运算符(位置运算符)?

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有