集合中记录的结构:
{
"_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中实现扩展器?
答案 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]
]]);