2016-01-15 9 views
2

Я использую Mongo с Meteor и написал основной CRUD, но хотел знать, возможно ли обновлять все поля в записи. Я могу только показаться, чтобы обновить конкретное поле в записи, как это:Meteor/MongoDB обновить все поля для ввода

Brief.update(briefObject._id, { $set: { description: briefObject.description} }); 

Можно ли обновить всю запись, передавая в весь объект? Я пытаюсь сохранить свой код сухим и не нужно писать разные функции для обновления разных полей для записи. Что-то вроде этого:

Brief.update(brief._id, { $set: briefObject } 

Вот выход примера записи:

meteor:PRIMARY> schema = db.briefs.findOne(); 
{ 
    "_id" : "a56xpJ3ZTAzZKFmwD", 
    "title" : "Foo", 
    "client" : "Bar", 
    "deadline" : ISODate("2017-01-01T12:00:00Z"), 
    "description" : "Lorem Ipsum Dolor Sit", 
    "createdAt" : ISODate("2016-01-15T16:20:46.403Z"), 
    "username" : "fooBar" 
} 

Вот пример briefObject:

{ title: 'Foo', 
    client: 'Bar', 
    deadline: Sun Jan 01 2017 12:00:00 GMT+0000 (GMT), 
    description: 'Lorem Ipsum Dolor Sit Amet', 
    createdAt: Fri Jan 15 2016 16:20:46 GMT+0000 (GMT), 
    username: 'fooBar', 
    _id: 'a56xpJ3ZTAzZKFmwD', 
    '$$hashKey': 'object:4' 
} 
+0

Короче говоря, да. Но это также зависит от вашего определения схемы и если оно соответствует свойствам в 'briefObject'. Можете ли вы изменить свой вопрос, чтобы показать свою схему коллекции «Краткая» и типичный пример «briefObject»? – chridam

+0

Да, конечно, я обновил вопрос. –

+1

Вам нужно будет удалить два других ключа '_id' и' $$ hashKey' перед тем, как использовать объект в обновлении, поскольку это зарезервированные ключи в Mongo. – chridam

ответ

1

можно воссоздать объект обновления для использования в $set оператор, удалив остальные две клавиши _id и $$hashKey befo повторно использовать его в обновлении. При таком подходе вам не нужно воссоздавать все свойства объекта, просто удалите зарезервированные ключи из нового объекта, и вам хорошо идти.

Вы можете создать объекты селектора и модификаторов, которые вы можете использовать в своих update, как в следующем примере:

var selector = { "_id": briefObject._id }, 
    modifier = { "$set": briefObject }; 

delete modifier["$set"]["_id"]; 
delete modifier["$set"]["$$hashKey"]; 

Brief.update(selector, modifier); 
+1

Спасибо! Кажется, это работает очень хорошо. Я заметил, что если у вас есть какие-либо вложенные объекты, вам также нужно будет удалить «$$ hashkey». –

+1

@ChrisWilliams Не стоит беспокоиться :) В таком случае вам нужно будет прокрутить вложенные объекты и удалить поля, как вы упомянули. – chridam

Смежные вопросы