Изменить поле по числу в вложенном массиве

Скажем, есть структура данных, содержащая такие объекты, как

{ 
  name : 'ernie',
  likes : [
  {
    what : 'rubber duckie',
    howmuch : 5
  },
  {
    what : 'bert',
    howmuch : 3
  }]
}

и

{ 
  name : 'cookie monster',
  likes : [
  {
    what : 'cookies',
    howmuch : 100
  }]
}

Если 0 -й элемент ernie likes -array должен иметь значение howmuch -value, например, на 1, есть ли команда MongoDB для этого? JavaScript-эквивалент будет ernie.likes[0].howmuch++.

В частности, можно получить доступ к элементам массива по индексу?

Ответ 1

Чтобы увеличить значение поля howmuch на 1 из 0 -го элемента массива ernie-like, используйте $inc вместе с точечной нотации, чтобы получить доступ к элементу массива с нулевым значением, на основе индекса:

db.collection.update(
    {
        "name": "ernie"       
    }, 
    { 
        "$inc" : { "likes.0.howmuch" : 1 } 
    }
)

Ответ 2

Вы хотите создать индекс в массиве? если да, вам нужно создать индекс в массиве "любит". с этим кодом: db.sample.createIndex ({likes : 1}). или, более конкретно, вам нужно создать db.sample.createIndex ({'likes.howmuch': 1})

После создания индекса вы можете получить доступ к элементам массива с индексом.