_id объекта в записи изменяется при обновлении данных того же объекта

У меня есть массив объектов. Каждый объект сохраняет виды деятельности. Мне нужно обновить один из объектов массива. Я использовал _id для обновления или удаления объекта. Поэтому, когда я передаю идентификатор для обновления данных, я на самом деле нахожу индекс этого объекта в массиве и заменяю данные этого индекса новыми данными.

Здесь проблема в том, что мой _id также изменяется, потому что я не использую $set или не обновляю напрямую с помощью запроса. Я изменяю данные, используя функцию карты, и сохраняю их в курсор mongoDB, который позже в каком-то месте обновляется.

Ниже приведен код и вывод кода.

    organization.activityTypes = organization.activityTypes || [];
                    let findInd = organization.activityTypes.findIndex(x => x._id.toString() == (activityType.id?activityType.id.toString() : ''));
                    if(activityType.isDelete == true ) {
                        if(findInd > -1) organization.activityTypes.splice(findInd,1);
                    }
                    else if(findInd > -1) {
                        organization.activityTypes[findInd] ={
                            _id : activityType._id,
                            teams : activityType.teams == [] ? allTeams : activityType.teams ,
                            name: toTitleCase(activityType.name),
                            isDelete: activityType.isDelete,
                            custom : activityType.custom
                        }
                    }
                    else {
                        organization.activityTypes.push({
                            teams: activityType.teams == [] ? allTeams : activityType.teams,
                            name: toTitleCase(activityType.name),
                            isDelete: activityType.isDelete,
                            custom: activityType.custom
                        })
                    }
                })

Вывод вышеуказанного кода приведен ниже. Это изображение на выходе.

Итак, я изменил название вида деятельности. Первоначально его идентификатор 5a15438482900b2aa6dc7ab1, затем он преобразуется в 5a15498cb024a02b4628e33f. Как я могу предотвратить это изменение _id в базе данных при каждом обновлении?

1 ответ

Решение

Я обнаружил, что если я изменю весь объект в определенной позиции индекса, _id этого индексированного объекта также изменится, но если я изменю только поля этих объектов, обновятся данные объекта, но не _id. Мой обновленный код написан ниже.

args.activityTypes.map((activityType)=> {
                    let findInd = organization.activityTypes.findIndex(x =>(x._id.toString() == (activityType.id?activityType.id.toString() : '')));
                    if(activityType.isDelete == true ) {
                        if(findInd > -1) organization.activityTypes.splice(findInd,1);
                    }
                    else if(findInd > -1) {
                        organization.activityTypes[findInd].teams = activityType.teams == [] ? allTeams: activityType.teams;
                        organization.activityTypes[findInd].name = toTitleCase(activityType.name);
                        organization.activityTypes[findInd].isDelete = Object.prototype.hasOwnProperty.call(activityType,'isDelete') ? activityType.isDelete :organization.activityTypes[findInd].isDelete;
                        organization.activityTypes[findInd].custom = Object.prototype.hasOwnProperty.call(activityType,'custom') ? activityType.custom :organization.activityTypes[findInd].custom;
                    }
                    else {
                        organization.activityTypes.push({
                            teams: activityType.teams == [] ? allTeams : activityType.teams,
                            name: toTitleCase(activityType.name),
                            isDelete: activityType.isDelete,
                            custom: activityType.custom
                        })
                    }
                })
Другие вопросы по тегам