刚开始接触 不是很明白,希望有知道的说明下原因

db.mongo.insert({name:'mongo'});
> var t=db.mongo.findOne();
> t{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> var d=t   > d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> d.password=123123> d
{	"_id" : ObjectId("5141b98723616e67f947f356"),	"name" : "mongo",	"password" : 123}
> t{	"_id" : ObjectId("5141b98723616e67f947f356"),	"name" : "mongo",	"password" : 123}

问题1

var d = t

是引用赋值吗 如果是的话,怎么样不使用引用赋值

delete d.passwordtrue> d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> d.password=124124> d
{	"_id" : ObjectId("5141b98723616e67f947f356"),	"name" : "mongo",	"password" : 124,	"password" : 124}

问题2 我执行

delete d.password

返回 true 说明已经删除,为什么我再执行

d.password=124

会执行两次添加

> d
{	"_id" : ObjectId("5141b98723616e67f947f356"),	"name" : "mongo",
	"password" : 124,
	"password" : 124
}
江户川乱折腾
浏览 183回答 2
2回答

莫回无

第一个问题 ... 因为两个条目有同样的 ObjectId 所以视为是同一条 ...虽然事实上不是引用赋值但你可以这么理解 ...第二个问题无法复现所以不知 ...

料青山看我应如是

对的,这个是单纯的Javascript语法的问题。在Javascript中是存在这个问题的。即深复制和浅复制的问题:var cloneObj = function(obj){    var str, newobj = obj.constructor === Array ? [] : {};    if(typeof obj !== 'object'){        return;     } else if(window.JSON){         str = JSON.stringify(obj), //系列化对象         newobj = JSON.parse(str); //还原     } else {        for(var i in obj){            newobj[i] = typeof obj[i] === 'object' ?              cloneObj(obj[i]) : obj[i];          }     }    return newobj; };
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB