【问题标题】:Duplicate an object in array in mongoose在猫鼬中复制数组中的对象
【发布时间】:2019-05-30 23:02:21
【问题描述】:

我想在 mongoose 中复制数组中的一个对象。

例如,如果有一个对象projectName 是“a”,我想创建一个完全相同的对象,但名称称为“a duplicated”。

我尝试了以下代码:

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。

如何复制对象但保持 projectName 和 _id 不同?

【问题讨论】:

  • 您可以生成您选择的_id

标签: node.js mongodb express mongoose mongodb-query


【解决方案1】:

使用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)

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2021-05-06
    • 2019-03-28
    • 2021-08-16
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多