MongoDB Добавить дополнительный встроенный документ вместо его перезаписи - PullRequest
3 голосов
/ 24 марта 2012

У меня есть MongoDocument X, в котором есть несколько экземпляров MongoEmbeddedDocument Y.

Теперь я хочу добавить дополнительный вложенный документ Y в мою коллекцию X. Я пробовал следующий код:

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

Проблема в том, что этот фрагмент кода удалит всю мою коллекцию встроенных документов, которые у меня были. Можно ли как-нибудь добавить один, не удаляя существующие?

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Предполагая, что вы используете массив для хранения вашего 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, вероятно, лучше, и вы можете сделать это с помощью одной команды обновления.

2 голосов
/ 24 марта 2012

Вы должны использовать $push, чтобы сделать это:

{ $push : { field : value } }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...