Дублировать объект в массиве в мангусте - PullRequest
0 голосов
/ 04 января 2019

Я хочу продублировать объект в массиве в mongoose.

Например, если есть объект, который projectName является «а», я хочу создать тот же самый, но имя называется «дублированный».

Я попытался следующий код:

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 разными?

1 Ответ

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

Используйте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...