【问题标题】:How i can copy object property to another object?我如何将对象属性复制到另一个对象?
【发布时间】:2017-05-08 04:13:36
【问题描述】:

我对 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}

]

我试图实现的是将 TWITTER 和 LOCAL 帐户与 FACEBOOK 帐户断开连接。这是我尝试这样做的方法:

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

    //本地=未定义// // 推特 = 未定义 //

我的问题是:删除 LOCAL 和 TWITTER 帐户后,复制的字段也会消失。我想我只是复制了它的参考而不是它的价值。如果是这种情况,我该怎么做?

我希望我的问题看起来并不混乱。这是我在这里的第一篇文章。 谢谢你的回答。

【问题讨论】:

  • This post 可以帮助你:var clone = JSON.parse(JSON.stringify(obj));

标签: node.js mongodb mongoose


【解决方案1】:

因此,Node 中的对象的问题在于,当您“复制”它们(即 var x = y)时,您实际上是在创建指向原始对象的指针。您可能想要做的是:

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

所以它的作用是获取原始对象,将其深拷贝到一个新对象中(2 个单独的内存位置),然后最后我使用 delete 删除键(基本上将它们设置为未定义) .

更多关于 Object.assign 的信息请参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

【讨论】:

  • 尤其是您发送的链接非常有帮助。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2012-03-10
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多