yii2-mongodb使用$ pull更新语法

时间:2016-07-07 13:18:01

标签: mongodb yii2

集合中记录的结构:

{
    "_id": ObjectId("577e3c801da29a8f2f8b4567"),
    "contacts": [
        { "id": NumberInt(7) },
        { "id": NumberInt(8) } 
    ],
    "user": NumberInt(10) 
}

有必要从contacts数组中删除具有特定id的对象的所有记录。

在Mongo中,问题通过这样的请求解决(对于id = 7):

db.perimeter.update({ }, {$pull: {contacts: {id:7}}}, {multi: true})

如何在yii2-mongodb中实现扩展器?

2 个答案:

答案 0 :(得分:0)

return $this->updateAll(
    [ '$pull' => ['contacts' => ['id' => ['$in' => $contactIds] ] ] ],
    [ 'user' => $this->user ]
);

其中$ contactIds - 用于从联系人中删除对象(带有这些ID)的id-s数组。

答案 1 :(得分:0)

  $data = Category::findOne(['_id' => $id]);
    $key = array_search($parent_id, array_column($data->parent, 'id'));
    Yii::$app->mongodb->getCollection('category')->update(['_id' => $id], ['$pull' => [
            'parent' => $data->parent[$key]
    ]]);