1

假设我们有这样的文件

{
    "_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 设置为数组是没有意义的,但它在我的代码中不像那样工作;(

希望你能帮助我,并为我的英语不好感到抱歉;)谢谢!

4

1 回答 1

1

您必须遍历所有文档并将值更改为数组。例如,您可以这样做:

$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']['像'] ) ) ) );
    }
}
于 2012-02-25T12:27:54.603 回答