2015-03-03 2 views
1

Я хочу создать метод PATCH для моего API, но есть кое-что, что я не понимаю. Представьте себе, у меня есть следующий документ в моей базе данных MongoDB:Метод PATCH для MongoDB с использованием узла

{ 
    _id : ObjectId(1234...), 
    name : "bob", 
    age : 30 
} 

Теперь я хотел бы обновить этот документ, но я не знаю, что мой keys API получит. Поэтому представьте себе, что я делаю request, чтобы изменить age, но также добавить last_name.

Результат запроса будет выглядеть так:

{ 
    _id : ObjectId(1234...), 
    name : "bob", 
    last_name : "smith", 
    age : 44 
} 

Основная проблема здесь заключается в том, что я не знаю, аргументы я буду получать.

Моя цель - обновить значения существующих ключей, а добавить ключи, которых нет в документе.

Есть идеи?

Благодаря

ответ

4

Вы хотите использовать оператор $set.

Это обновление только ключей, отправленных в запросе на обновление. Без $set он перепишет весь объект, который, очевидно, не тот, который вы хотите.

app.patch('/user/:id', function (req, res) { 
    var updateObject = req.body; // {last_name : "smith", age: 44} 
    var id = req.params.id; 
    db.users.update({_id : ObjectId(id)}, {$set: updateObject}); 
}); 

Я предполагаю, что пару вещей здесь:

  1. Вы используете экспресс.
  2. Вы используете либо драйвер MongoDB или mongojs модуль
+0

НПМ Это как я подхожу это тоже, но было интересно, если бы вы так нашли способ около $ установлен. Ясно, что это работает, поэтому мне действительно интересно узнать о умном решении. – Vontei

+0

@ Vontei Я думаю, что другой способ, который вы могли бы сделать, - это получить существующий объект из БД, выполнить сравнение вручную, а затем нажать весь объект без $ set. Это может быть полезно для проверки схемы, но мне просто нравится использовать $ set с правильной проверкой схемы. Он легкий и может использоваться с оператором $ на массивах соответствующего запроса. –

+0

Удивительно, спасибо. – Vontei

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