使用$ elemMatch更新yii2中的匹配元素

时间:2016-03-29 08:49:14

标签: php mongodb yii2

任何机构都知道如何更新特定匹配元素,如下面的选择查询

$account = $query->from('user')
            ->where([
                'email_account' => [
                    '$elemMatch' => [
                        'email' => 'abcd@gmail.com'
                    ],
                ],
            ])
            ->andWhere(['_id' => $userId])
            ->all();

如果您知道该元素的更新查询,请让我知道,所以我可以更新Yii的对象下面

"email_account" : [ 
    {
        "name" : "abcd",
        "email" : "abcd@gmail.com",
        "password" : "abcd",
    },
    {
        "name" : "test",
        "email" : "test@gmail.com",
        "password" : "test",           
    }
]

1 个答案:

答案 0 :(得分:0)

如果您使用任何更新运算符,例如 $set 来更新name字段,请将其与 {{3}一起使用} $标识匹配数组项在查询中的位置,然后对其进行操作。

使用没有Active Record和MongoDB的以下示例 直接调用数据库:

$criteria = ['_id' => $userId, 'email_account.email' => 'abcd@gmail.com' ];
$modifier = [
    '$set' => [
        'email_account.$.name' => 'Jane Doe'
    ]
];
Yii::app()->mongodb->getCollection('collectionName')->update($criteria, $modifier);