蒙戈DB:一个字段更改为阵列

问题描述:

假设我们有这样蒙戈DB:一个字段更改为阵列

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

一个文档,我们改变了主意,想要把更多的东西,以数据 - >像这样它看起来像;

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

所有的原子操作符,如$推,$ pushAll和$ addToSet作品只是当数据 - >像已经是一个数组。

我正在使用php-driver。在这个例子中,没有必要在开始时将Data-> Like设置为数组,但它在我的代码中不起作用;(

希望你能帮助我,并对我的糟糕英语感到抱歉;)谢谢!

您必须迭代所有文档并将其值更改为数组。例如,你可以做到这一点:

 
$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'])))); 
    } 
} 
+0

谢谢,我不想用我所有的证件做,但我想我可以奶源修复它在我想要的方式。我希望只是添加数据的运营商;( – Mattias 2012-02-25 12:33:58