更新mongodb对象中的项目

时间:2014-03-20 08:07:44

标签: php mongodb mongodb-query mongodb-php

我正在尝试save()对象内的记录。问题是我得到MongoCursor()-errorsunexpected 'array' (T_ARRAY)。例如:

这是我的MongoDB集合:

[
  {
    "id": "dfK15ale12",
    "keys": {
      "gcm_key": "abc",
      "app_secret": "123"
    }
  }

我想更新gcm_key里面的keys,这是我的PHP代码:

$db->apps->save(
    array("_id" => $update['_id'])
    array("$push" => 'keys.gcm_android' => $gcm_android);
);

这给了我以下错误:

Parse error: syntax error, unexpected 'array' (T_ARRAY) in C:\xampp\htdocs\api\update.php on line 3

我用Google搜索并在Stack上查找答案,但我什么也没找到。也许我错过了什么。我不知道,正确的mongoDB游标是什么,哪个是save() gcm_key的最简单方法?

3 个答案:

答案 0 :(得分:1)

您似乎想要的操作是update

$db->apps->update(
    array('_id' => $update['_id']),
    array('$push' => array('keys.gcm_android' => $gcm_android))
);

但不清楚你想要的最终结果是什么。这将产生以下结果:

{
    "_id" : ObjectId("532aa3d15fcd8ecb9ae23567"),
    "id" : "dfK15ale12",
    "keys" : {
            "gcm_key" : "abc",
            "app_secret" : "123",
            "gcm_android" : [
                    123
            ]
    }
}

假设您的123变量中的值为$gcm_android。如果您有阵列,请查看$pushAll

如果您只想将其他属性添加到密钥,请使用$set

$db->apps->update(
    array('_id' => $update['_id']),
    array('set' => array('keys.gcm_android' => $gcm_android))
);

这是你的结果:

{
    "_id" : ObjectId("532aa3d15fcd8ecb9ae23567"),
    "id" : "dfK15ale12",
    "keys" : {
            "gcm_key" : "abc",
            "app_secret" : "123",
            "gcm_android" : 123
    }
}

答案 1 :(得分:0)

你的语法错了:

$db->apps->save(
    array("_id" => $update['_id'])
    array("$push" => 'keys.gcm_android' => $gcm_android);
);

应该是:

$db->apps->update(
    array("_id" => $update['_id']),
    array('$push' => array('keys.gcm_android' => $gcm_android))
);

这就是错误在这里告诉你的事情:

  

意外'阵列' (T_ARRAY)

实际上它首先是逗号,然后是数组

答案 2 :(得分:0)

$db->apps->update(
    array('_id' => new MongoId('YOURIDGOESHERE')),
    array('$set' => array('keys.gcm_android' => $gcm_android))
);