删除字段并仍然查询它?

时间:2015-09-30 17:32:08

标签: mongodb

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

来自:MongoDB The Definitive Guide (2ed, K. Chodorow)(第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" : "joe"}),查询delete joe.name;如何返回文档?

我必须正确地解释一些事情。它是什么?

1 个答案:

答案 0 :(得分:1)

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

所以delete joe.name;仅影响joe副本,直到后面的db.users.update调用替换集合中的文档,其内容为{{1} }}。这就是为什么joe仍然可以找到该文档进行更新的原因。