Я пытаюсь обновить элементы в массиве с помощью уникальных ObjectIds (что означает добавление идентификатора объекта в объект массива, в котором они отсутствуют)
Если у меня есть массив объектов рубашки в моей коллекции, и я попробую это:
db.people.update({
$and : [
_id: ObjectId('5eeb44c6a042791d28a8641f'),
{
$or: [
{ 'shirts._id': { $eq:null } },
{ 'shirts._id':{ $exists:false } }
]
}
]
},{
$set: { 'shirts.$[]._id': new ObjectId() }
},{
"multi" : true
}
);
Он генерирует ИДЕНТИЧНЫЕ ObjectsID для каждого элемента массива, я бы поставил для него уникальный индекс, однако вариант использования, вероятно, не увидит более 2-3 элементов в массиве с крайними случаями, достигающими 5-6, что похоже на злоупотребление индексом
Как я могу обновить несколько записей или несколько объектов массива с уникальным ObjectId?

Когда вы используете $set, вы говорите mongo установить это значение для всех совпадающих элементов. Если элементы в массиве уже определены как схемы, mongo автоматически выдаст новые ObjectIds для каждой из них.
В качестве альтернативы вы можете использовать forEach и перебирать каждый соответствующий элемент, создавая новый ObjectId.
Зачем вы видите обновленный запрос? Mongo может автоматически заполнять _ids, если вы сообщите ему, что вложенные объекты являются схемами.
данные уже существуют - я хочу исправить - у этих объектов нет идентификаторов
Этот ответ очень похож на stackoverflow.com/a/22657219/978697
Вы можете привести пример для каждого