mongodb - 开始使用mongo 发现一个问题,很难描述,请慢慢看代码
ringa_lee
ringa_lee 2017-04-21 11:16:56
0
3
631
 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_lee
ringa_lee

ringa_lee

全員に返信(3)
小葫芦

最初の質問... 2 つのエントリは同じObjectIdを持っているため、同じものとみなされます...

実際には参照割り当てではありませんが、このように理解できます...

2番目の問題は再現できないのでわかりません...

いいねを押す +0
左手右手慢动作

これは、ObjectId に関する同じ問題であるか、単に JavaScript 構文で参照の割り当てが必要であるかのどちらかです。クローンを作成したい場合は、これを見てください。 http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object

2番目の問題にも遭遇していません。

いいねを押す +0
迷茫

はい、これは純粋に Javascript 構文の問題です。この問題は Javascript に存在します。つまり、深いコピーと浅いコピーの問題:

リーリー

コードはhttps://www.zhihu.com/question/23031215から転送されました

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート