MongoDB添加额外的嵌入式文档而不是覆盖它

时间:2012-03-23 20:54:57

标签: shell mongodb

我有一个MongoDocument X,它有一些MongoEmbeddedDocument Y的实例。

我现在想在我的X系列中添加一个额外的embeddeddocument Y.我尝试过以下代码:

var mongo = db.x.findOne();
mongo.y = { title:"test" }
db.x.save(mongo)

问题是这段代码将删除我所拥有的整个y嵌入式文档集合。有没有我可以添加一个而不删除现有的?

2 个答案:

答案 0 :(得分:2)

你必须使用$push来执行此操作:

{ $push : { field : value } }

http://www.mongodb.org/display/DOCS/Updating#Updating-%24push

答案 1 :(得分:2)

假设您使用数组存储y,您可能想要进行$ push,例如:

var mongo = db.x.findOne();
db.x.update({_id:mongo._id}, {$push:{y:{title:"test2"}}});

如果您想再次保存整个记录,可以更接近您的尝试:

var mongo = db.x.findOne();
mongo.y.push({title:"test2"});
db.x.save(mongo);

但$ push可能更好,你可以在一个更新命令中完成。