2012-04-20 71 views
1

比方说,我有这样的对象保存在MongoDB中:保存现有对象时,保存方法是否仅更新传递字段?

{ "hello" : "goodbye", "_id" : ObjectId("4f90c9106aee6e21b4e55c65"), "test" : "world" }; 

我做

db.table.save({"_id" : ObjectId("4f90c9106aee6e21b4e55c65"), "test" : "changed value"}); 

它将更新现有记录? (测试的价值将被“改变”,其余将完好无损),或者创建一个新的?

谢谢!

回答

1

是的。如果您通过_id并使用“保存”,它将更新它。

> db.test.insert({ "hello" : "goodbye", "_id" : ObjectId("4f90c9106aee6e21b4e55c65"), "test" : "world" }); 
> db.test.save({"_id" : ObjectId("4f90c9106aee6e21b4e55c65"), "test" : "changed value"}); 
> db.test.find(); 
{ "_id" : ObjectId("4f90c9106aee6e21b4e55c65"), "test" : "changed value" } 

对不起,错过了你问题的第二部分。您正在寻找:

db.test.update({_id: ObjectId("4f90c9106aee6e21b4e55c65")}, {$set:{test:"changed value"}}); 
+0

但是,如果对象有20个字段,并且我传递_id和只有3个字段。它会更新这3个字段,并保持其余字段完好无损吗?或者它会让它们变成空白?谢谢 – TomShreds 2012-04-20 03:45:02

+1

如果你像你在例子中那样做,它会将它们留空。但是,有语法只更新3个字段而不删除其余部分。查看$ set在http://www.mongodb.org/display/DOCS/Updating#Updating-%24set – 2012-04-20 03:46:34