Mongo从集合中删除整个数组

时间:2014-12-15 04:27:53

标签: php arrays mongodb

我们说我保存了这个对象:

{
  "_id" : "54122fe6965f599d211ea9ec",
  "cat": {
    "bla" : "foo"
  },
}

我有数百个条目,我需要更改cat数组,比如说:

{
  "_id" : "54122fe6965f599d211ea9ec",
  "animals" : {
    "cat": {
      "bla" : "foo"
    },
  }
}

所以我随后使用我的新阵列进行更新,但是,如果我更新了它,我怎么能删除原来的猫阵列?所以现在我离开了:

{
  "_id" : "54122fe6965f599d211ea9ec",
  "cat": {
    "bla" : "foo"
  },
  "animals" : {
    "cat": {
      "bla" : "foo"
    },
  }
}

我试过了:

$this->database->$collection->remove(array('cat'));

但是没有运气

1 个答案:

答案 0 :(得分:1)

MongoDB有一个名为$unset的更新运算符。您就像使用 $set 运算符一样更新文档,但当然它恰恰相反。您的查询部分需要逻辑上的$exists运算符:

$this->database->$collection->update(
    array( 'cat' => array( '$exists' => true ) ),
    array( '$unset' => array( 'cat' => 1 ) ),
    array( 'multiple' => true )
);

所以你基本上想要.update()这就是你正在做的事情,改变现有的文件。其他操作也有意义.insert()创建和.remove()删除整个文档。

顺便说一句。您拥有的结构不称为"数组"尽管PHP具体表示法。这些是#34;嵌套文档",数组是方括号内的内容:[]