Mon go updateMany с $ set agreggation, собственной ссылкой и членом массива дает пустой массив - PullRequest
2 голосов
/ 10 апреля 2020

С Пн go 4.2.5 и этой коллекцией

db.foo.insert({foo:["bar", "baz"]})

при попытке скопировать "baz" в массиве в новое поле с именем foobaz, например, в оболочке:

db.foo.updateMany({}, [{$set:{foobaz: "$foo.1"}}])

Я получаю такой объект

{
   _id: fooid,
   foo: ["bar", "baz"],
   foobaz: []//empty array instead of "baz"
}

Что я делаю не так?

1 Ответ

1 голос
/ 10 апреля 2020

Вам необходимо $ arrayElemAt , поскольку для $set требуется синтаксис доступа к массиву Aggregation Framework:

db.foo.updateMany({}, [{$set:{foobaz: { $arrayElemAt: [ "$foo", 1 ] }}}])
...