1

このようなドキュメントがあるとしましょう

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

そして、私たちは考えを変えて、もっと多くのものをData-> Likeにプッシュしたいので、次のようになります。

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

$ push、$ pushAll、$ addToSetなどのすべてのアトミック演算子は、Data->Likeがすでに配列である場合にのみ機能します。

私はphp-driverを使用しています。この例では、最初にData-> Likeを配列に設定しないという意味はありませんが、私のコードではそのようには機能しません;(

あなたが私を助けてくれて、私の悪い英語をお詫びしてくれることを願っています;)ありがとう!

4

1 に答える 1

1

すべてのドキュメントを繰り返し処理し、値を配列に変更する必要があります。たとえば、次のようにできます。

$m = 新しい 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']['お気に入り'] ) ) ) );
    }
}
于 2012-02-25T12:27:54.603 に答える