Mongo DB: изменить поле на массив - PullRequest
1 голос
/ 25 февраля 2012

Допустим, у нас есть такой документ

{
    "_id" : "1234",
    "Data" : {
         "Name" : "Pythagoras",
         "Like" : "Math"
}

И мы изменили свое мнение и хотим добавить больше данных в Data-> Like, чтобы он выглядел;

{
    "_id" : "1234",
    "Data" : {
         "Name" : "Pythagoras",
         "Like" : ["Math", "Science"]
}

Все атомарные операторы, такие как $ push, $ pushAll и $ addToSet, работают только тогда, когда Data-> Like уже является массивом.

Я использую php-драйвер.В этом примере нет смысла не устанавливать массив Data-> Like в начале массива, но в моем коде он работает не так ((

). Надеюсь, вы мне поможете, и извините за мой плохой английский;) Спасибо!

1 Ответ

1 голос
/ 25 февраля 2012

Вам придется перебирать все ваши документы и менять значение на массив.Например, вы можете сделать это с помощью:

$m = new Mongo();
$c = $m->yourdbname->yourcollectionname;

foreach ( $c->find() as $r )
{
    if ( !is_array( $r['Data']['Like'] ) )
    {
        $c->update( array( '_id' => $r['_id'] ), array( '$set' => array( 'data.like' => array( $r['data']['like'] ) ) ) );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...