찾다

 >  Q&A  >  본문

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_lee2823일 전659

모든 응답(3)나는 대답할 것이다

  • 高洛峰

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

    첫 번째 질문... 두 항목이 동일하므로 ObjectId 동일한 항목으로 간주됩니다...

    실제로 참고과제는 아니지만 이렇게 이해하시면 됩니다...

    두번째 문제는 재현이 안되어서 잘 모르겠네요...

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-21 11:18:56

    이것은 ObjectId와 동일한 문제이거나 단순히 JavaScript 구문에 참조 할당이 필요합니다. 복제하고 싶다면 이것을 시청하십시오. http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object

    두 번째 문제도 발생하지 않았습니다.

    회신하다
    0
  • 迷茫

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

    예, 이는 순전히 자바스크립트 구문 문제입니다. 이 문제는 Javascript에 존재합니다. 즉, 딥카피와 얕은카피의 문제:

    으아아아

    코드는 https://www.zhihu.com/question/23031215에서 전송됩니다

    회신하다
    0
  • 취소회신하다