Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MongoDB更新数组字段内的特定键/值_Mongodb - Fatal编程技术网

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

使用MongoDB更新数组字段内的特定键/值,mongodb,Mongodb,作为前言,我已经与MongoDB合作了大约一周,所以这可能是一个非常简单的答案 我的收藏中已经存储了数据,我们将此收藏称为内容,因为它包含文章、新闻等。每个文章都包含另一个名为作者的数组,其中包含作者的所有信息(地址、电话、标题等) 目标-我正在尝试创建一个查询,该查询将更新特定作者所在的每篇文章的作者地址,并且仅更新指定的作者块(而不是数组中存在的其他作者块) 某种程度上是对特定文章的“全局更新”,它会影响他/她的每一条现有内容的信息 下面是一个示例,说明了作者的内容是什么样子的 { "_i

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

我的收藏中已经存储了数据,我们将此收藏称为
内容
,因为它包含文章、新闻等。每个
文章
都包含另一个名为
作者
的数组,其中包含作者的所有信息(地址、电话、标题等)

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

某种程度上是对特定文章的“全局更新”,它会影响他/她的每一条现有内容的信息

下面是一个示例,说明了作者的
内容是什么样子的

{ 
"_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'}}});
所以理论上我应该能够更新slug
joe Someone
authors
记录,但不能更新
jane Someone
(第二作者),我只是不确定你到底是如何进入并更新该作者的所有记录的

我以为我走的是对的,以下是我尝试过的

b.content.update(
   {authors: 
     {$elemMatch: 
       {slug: 'joe-somebody'}
     }
   },
   {$set: 
     {address: '1234 Avenue Rd.'}
   },
   false,
   true
);
我只是相信$set语句中缺少了一些东西来指定正确数组中的正确作者和点。有什么想法吗

**更新**

我现在也试过:

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);

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

也许你可以使用$operator()?

是的,就是这样,用我使用位置运算符找到的解决方案更新了我的问题。