2013-09-24 6 views
1

У меня есть следующий документ:Монго DB, PHP добавить или обновить поле в документе

{ 
    "_id": ObjectId("5241f1d79b7e7aed05000000"), 
    "description": { 
    "nl": "Hallo", 
    "en": "Hello" 
    }, 
    "name": "Marc" 
} 

Теперь мне нужно обновить, чтобы обновить одну существующее поле или добавить новое поле в описании. В PHP я использую функцию обновления для Монго и следующий код:

$new_data = array(
    '$set' => array(
    "description" => array(
     "de" => "hallo" 
     ) 
    ) 
); 

Что она делает это снимает все другие поля и просто вставить в поле «де». Я попытался заменить $ set на $ push (который, как я думал, был сделан для этого), но никакого результата также не будет. $ SetOnInsert ничего не делает.

Как решить эту проблему, чтобы я мог либо добавить новое поле (если оно не существует), либо обновить, если оно существует.

Благодаря

+0

перед обновлением добавить предыдущий рекорд в $ new_data в описании, потому что думать логически вы обновляете filed –

+0

Это имеет смысл, но это означает, что в некоторых случаях мне нужно отправить, например, 23 дополнительных поля в сообщении, которые не обновляются. Другого пути нет? –

+0

вы можете добавить больше полей, но в вашем случае описание - это массив, и вы заменяете другим значением –

ответ

1

Просто сделайте обновление как

{$set: {"description.de": "hello"}} 

Я думаю, в вашем коде это будет:

$new_data = array(
    '$set' => array(
    "description.de" => "hallo" 
) 
); 
Смежные вопросы