Подтвердить что ты не робот

Обновление определенного ключа/значения внутри поля массива с помощью MongoDB

В качестве предисловия я работаю с MongoDB уже около недели, так что это может оказаться довольно простым ответом.

У меня есть данные, уже сохраненные в моей коллекции, мы будем называть эту коллекцию content, так как она содержит статьи, новости и т.д. Каждый из этих articles содержит другой массив с именем author, который имеет всю информацию об авторе (Адрес, телефон, название и т.д.).

Цель. Я пытаюсь создать запрос, который будет обновлять адрес автора в каждой статье, в которой существует конкретный автор, и только указанный блок автора (а не другие, которые существуют в массиве).

Отсоедините "Глобальное обновление" к определенной статье, которая влияет на его/ее информацию на каждый фрагмент контента, который существует.

Вот пример того, как выглядит content с author.

{ 
"_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'}}});

Таким образом, теоретически я должен был бы обновить запись authors для slug 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);

Он обновляет все записи правильно, спасибо!

4b9b3361