Mongodb 是否删除字段并仍对其进行查询?

Mongodb 是否删除字段并仍对其进行查询?,mongodb,Mongodb,我是Mongo的新手,需要澄清一下。在下面的示例中,一个字段似乎已被删除,然后仍以某种方式用于运行查询 发件人:(第32页) 用户文档: { "_id" : ObjectId("4b2b9f67a1f631733d917a7a"), "name" : "joe", "friends" : 32, "enemies" : 2 } 将此文档存储到改变其结构的变量… > var joe = db.users.findOne({"name" : "joe"}); > joe.relatio

我是Mongo的新手,需要澄清一下。在下面的示例中,一个字段似乎已被删除,然后仍以某种方式用于运行查询

发件人:(第32页)

用户文档:

{
"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),
"name" : "joe",
"friends" : 32,
"enemies" : 2
}
将此文档存储到改变其结构的变量…

> var joe = db.users.findOne({"name" : "joe"});
> joe.relationships = {"friends" : joe.friends, "enemies" : joe.enemies};
{
"friends" : 32,
"enemies" : 2
}> joe.username = joe.name;
"joe"
> delete joe.friends;
true
> delete joe.enemies;
true
…最后是让人困惑的一点:

> delete joe.name;
true
> db.users.update({"name" : "joe"}, joe);
它返回更新的文档,但是如果我们刚刚删除了name字段(
delete joe.name;
),查询如何返回文档


我一定是误解了什么。它是什么?

在您的示例中,
joe
只是
用户
集合中实际文档的内存副本


所以
删除joe.name
仅影响
joe
复制,直到后续的
db.users.update
调用结束时将集合中的文档替换为
joe
的内容。这就是为什么文档仍然可以被更新的
{name:'joe'}
找到的原因。

哦,它是副本,不是参考。谢谢你把它清理干净!