recherche

Maison  >  Questions et réponses  >  le corps du texte

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_lee2822 Il y a quelques jours657

répondre à tous(3)je répondrai

  • 高洛峰

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

    La première question... Parce que les deux entrées ont la même ObjectId, elles sont considérées comme la même...

    Bien qu'il ne s'agisse pas réellement d'une mission de référence, vous pouvez le comprendre de cette façon...

    Le deuxième problème ne peut pas être reproduit donc je ne sais pas...

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-21 11:18:56

    C'est soit le même problème avec ObjectId, soit simplement la syntaxe JavaScript nécessite une attribution de référence. Si vous voulez cloner, regardez ceci. http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object

    Le deuxième problème n’a pas été rencontré non plus.

    répondre
    0
  • 迷茫

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

    Oui, il s'agit purement d'un problème de syntaxe Javascript. Ce problème existe en Javascript. Autrement dit, le problème de la copie profonde et de la copie superficielle :

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

    Code transféré depuis https://www.zhihu.com/question/23031215

    répondre
    0
  • Annulerrépondre