首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用MongoDB更新数组字段内的特定键/值

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

Stack Overflow用户
提问于 2010-06-18 02:27:52
回答 1查看 9.9K关注 0票数 18

作为前言,我已经使用MongoDB大约一周了,所以这可能是一个非常简单的答案。

我已经将数据存储在我的集合中,我们将这个集合称为content,因为它包含文章、新闻等。每个articles都包含另一个名为author的数组,该数组包含所有作者的信息(地址、电话、头衔等)。

Goal -我正在尝试创建一个查询,它将更新特定作者所在的每一篇文章的作者地址,并且只更新指定的作者块(而不是数组中存在的其他作者块)。

一篇特定文章的“全局更新”,它会影响他/她对存在的每一条内容的信息。

下面是一个带有authorcontent的示例。

代码语言:javascript
复制
{ 
"_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" 
}

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

代码语言:javascript
复制
db.content.find({authors: {$elemMatch: {slug: 'joe-somebody'}}});

所以从理论上讲,我应该能够更新slug joe-somebodyauthors记录,但不能更新jane-somebody (第二个作者)的记录,我只是不确定您是如何到达并更新该作者的每条记录的。

我认为我在正确的轨道上,这是我尝试过的。

代码语言:javascript
复制
b.content.update(
   {authors: 
     {$elemMatch: 
       {slug: 'joe-somebody'}
     }
   },
   {$set: 
     {address: '1234 Avenue Rd.'}
   },
   false,
   true
);

我只是认为我在$set语句中遗漏了一些东西,无法在正确的数组中指定正确的作者和指针。有什么想法吗?

**Update**

我现在也试过了:

代码语言:javascript
复制
b.content.update(
   {authors: 
     {$elemMatch: 
       {slug: 'joe-somebody'}
     }
   },
   {$set: 
     {'authors.$.address': '1234 Avenue Rd.'}
   },
   false,
   true
);

解决方案:

这就是最终对我起作用的方法!

代码语言:javascript
复制
db.content.update({'authors.slug':'joe-somebody'},{$set:{'authors.$.address':'Address That I wanted'}},false,true);

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

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

https://stackoverflow.com/questions/3064450

复制
相关文章

相似问题

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