cari

Rumah  >  Soal Jawab  >  teks badan

mongodb - 开始使用mongo 发现一个问题,很难描述,请慢慢看代码

 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=123
123
> d
{
	"_id" : ObjectId("5141b98723616e67f947f356"),
	"name" : "mongo",
	"password" : 123
}
> t
{
	"_id" : ObjectId("5141b98723616e67f947f356"),
	"name" : "mongo",
	"password" : 123
}

问题1

var d = t

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

delete d.password
true
> d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> d.password=124
124
> 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
}

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

ringa_leeringa_lee2895 hari yang lalu688

membalas semua(3)saya akan balas

  • 高洛峰

    高洛峰2017-04-21 11:18:56

    Soalan pertama... Kerana kedua-dua entri mempunyai ObjectId yang sama, mereka dianggap sebagai yang sama...

    Walaupun ia sebenarnya bukan tugasan rujukan, anda boleh memahaminya dengan cara ini...

    Masalah kedua tidak boleh diterbitkan semula jadi saya tidak tahu...

    balas
    0
  • ringa_lee

    ringa_lee2017-04-21 11:18:56

    Ini sama ada masalah yang sama dengan ObjectId, atau hanya sintaks JavaScript memerlukan tugasan rujukan. Jika anda ingin mengklon, tonton ini. http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object

    Masalah kedua juga tidak dihadapi.

    balas
    0
  • 迷茫

    迷茫2017-04-21 11:18:56

    Ya, ini semata-mata isu sintaks Javascript. Masalah ini wujud dalam Javascript. Iaitu, masalah salinan dalam dan salinan cetek:

    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;
    };

    Kod dipindahkan daripada https://www.zhihu.com/question/23031215

    balas
    0
  • Batalbalas