Я хочу продублировать объект в массиве в мангусте.
Например, если есть объект, projectName которого является «a», я хочу создать полностью такой же, но имя называется «дублированный».
Я пробовал следующий код:
project.find({
"logininfo.username": username,
}, (err, users) => {
...
var user= users[0];
var dproject;
for(var i in user.projects){
if (user.projects[i].projectName === projectName)
{
dproject = user.projects[i];
break;
}
}
dproject.projectName += " duplicated";
dproject._id = new mongoose.Types.ObjectId();
user.projects.push(dproject)
projects.save((err, user) => {
...
Однако эта функция также изменит предыдущий объект, который создает полностью такой же объект (оба имени меняются на «дублированный»), эти два объекта имеют одинаковый _id.
Как я могу продублировать объект, но сохранить имя проекта и _id разными?





Используйте JSON.parse(JSON.stringify(object)) для глубокого копирования. Будет сделана копия, но не ссылка.
for (var i in projects.projects) {
if (projects.projects[i].projectName === projectName) {
dproject = JSON.parse(JSON.stringify(projects.projects[i])); //deep copy
break;
}
}
dproject._id = new mongoose.Types.ObjectId();
dproject.projectName += " duplicated";
projects.projects.push(dproject)
Вы можете сгенерировать _id по вашему выбору