MongoDB новый ObjectId над массивом, давая мне тот же Id для всех - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь обновить элементы в массиве с уникальными идентификаторами объектов (то есть добавить идентификатор объекта к объекту массива, в котором они отсутствуют)

Если в моей коллекции есть массив объектов рубашки, и я пытаюсь это сделать:

db.people.update({        
    $and : [
        _id: ObjectId('5eeb44c6a042791d28a8641f'),
        {
            $or: [
            { 'shirts._id': { $eq:null } },
            { 'shirts._id':{ $exists:false } }
            ]
        }           
    ]
},{ 
    $set: { 'shirts.$[]._id': new ObjectId() }
},{
    "multi" : true
}

);

Он генерирует IDENTICAL ObjectsID для каждого элемента массива, но я бы добавил уникальный индекс для этого, однако, в случае использования, вероятно, не будет видно более 2-3 элементов в массиве с краевыми случаями, достигающими 5-6, что выглядит как злоупотребление индекса

Как я могу обновить несколько записей или несколько объектов массива с уникальным ObjectId?

1 Ответ

0 голосов
/ 15 января 2019

Когда вы используете $set, вы говорите Монго, чтобы установить это значение для всех соответствующих элементов. Если элементы в массиве уже определены как схемы, mongo автоматически выдаст новые ObjectId для каждого из них.

Кроме того, вы можете использовать forEach и выполнять итерацию по каждому соответствующему элементу, создавая новый ObjectId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...