我是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;
如何返回文档?
我必须正确地解释一些事情。它是什么?
答案 0 :(得分:1)
在您的示例中,joe
只是users
集合中实际文档的内存副本。
所以delete joe.name;
仅影响joe
副本,直到后面的db.users.update
调用替换集合中的文档,其内容为{{1} }}。这就是为什么joe
仍然可以找到该文档进行更新的原因。