我如何将对象属性复制到另一个对象?

时间:2016-12-22 13:54:44

标签: node.js mongodb mongoose

我是JS,mongoDB和mongoose的新手。

我想尝试将一些文档字段复制到另一个文档。 之后我想删除原始文件。

这是我的mongoDB集合:

    [
// twitter account

{ "_id"     : "585bbba59659501d68f997ec", 
  "logIn"   : "twitter" , 
  "pollIds" : { "local" : [ ] , "facebook" : [ ] , "twitter" : [ ]} ,
  "twitter" : { "username"      : "xxxxx" , 
                "displayName"   : "xxxx yyyyy" , 
                "token"         : "" , //place for copied twitter token
                "id"            : "99999999999999999"} ,
  "__v" : 0},

  //facebook account connected with twitter and local

{ "_id"     : "585bbba99659501d68f997ed",
  "logIn"   : "facebook" , 
  "pollIds" : { "local" : [ ] , "facebook" : [ ] , "twitter" : [ ]} , 

  "twitter" : { "username"      : "xxxxx" ,
                "displayName"   : "xxxx yyyyy" , 
                "token"         : "tokentokentokentoken" , //token what i want to copy 
                "id"            : "99999999999999999" , 
                "dbId"          : "585bbba59659501d68f997ec"} ,

  "facebook": { "email"         : "xx@xx.com" ,
                 "displayName"  : "xxx  yyy" , 
                 "token"        : "facebooktoken" , 
                 "id"           : "8888888888888888"} , 

  "local"   : {  "password"     : "local user password" , 
                 "email"        : "ggg@ggg.com" , //email what i want to copy
                 "dbId"         : "585bbbc29659501d68f997ee"},
  "__v" : 0}

//local account

{ "_id"     : "585bbbc29659501d68f997ee", 
  "logIn"   : "local" , 
  "pollIds" : { "local" : [ ] , "facebook" : [ ] , "twitter" : [ ]} ,
  "local"   : { "password"  : "local password" ,
                "email"     : ""} , place for copied local email
  "__v" : 0}

]

我尝试实现的是从FACEBOOK帐户断开TWITTER和LOCAL帐户。以下是我尝试这样做的方法:

  1. 从FACEBOOK帐户将TWITTER令牌复制到TWITTER帐户
  2. 从FACEBOOK帐户将LOCAL电子邮件复制到LOCAL帐户
  3. 来自FACEBOOK帐户的
  4. 删除TWITTER和LOCAL帐户分配 他们未定义

    // local = undefined // // twitter = undefined //

  5. 我的问题是:在此之后我删除了LOCAL和TWITTER帐户,复制的字段也会消失。我想我只是复制了它的参考而不是它的价值。如果这就是我如何才能使这项工作?

    我希望我的问题看起来并不凌乱。这是我在此的头一篇博文。 谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

所以Node中的Objects就是当你“复制”它们时(即var x = y),你实际上是在创建一个指向原始对象的指针。您可能想要做的是以下内容:

var newObj = {};
Object.assign(newObj, originalObj);
delete originalObj['somekey'];

那么它做的是它需要原始对象,将其深层复制到一个新对象(2个独立的内存位置),然后最后我使用delete来删除键(基本上将它们设置为undefined)

有关Object.assign:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

的详细信息,请参阅此内容