【问题标题】:Update item inside a mongodb object更新 mongodb 对象内的项目
【发布时间】:2014-03-20 08:07:44
【问题描述】:

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

这是我的 MongoDB 集合:

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

]

我想更新keys里面的gcm_key,这是我的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

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

【问题讨论】:

  • array("$push" => array('keys.gcm_android' => $gcm_android)) 添加数组(
  • 你也少了一个逗号

标签: php mongodb mongodb-query mongodb-php


【解决方案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 变量中有值 123。如果您有数组,请查看$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
    }
}

【讨论】:

  • 我得到“解析错误:语法错误,意外的'数组'(T_ARRAY)”
  • @Jack 拼写错误已修复
  • 注意字符串插值,"$set" 和 "$push" 应该用单引号括起来...
  • @LaFabriqueDeCode 这就是我得到的剪切和粘贴:
  • 我收到了Parse error: syntax error, unexpected ';',看起来很奇怪。
【解决方案2】:
$db->apps->update(
    array('_id' => new MongoId('YOURIDGOESHERE')),
    array('$set' => array('keys.gcm_android' => $gcm_android))
);

【讨论】:

    【解决方案3】:

    你的语法全错了:

    $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)

    实际上是先说逗号,后说数组

    【讨论】:

    • .save() 不接受两个参数,所以基本上是使用错误的函数
    • 我得到“未定义的变量:推送”
    • 我得到了 "null" 作为 echo json echo json_encode($update);
    • @Jack 如果 $update 为空,那么您需要找出未正确分配它的原因。我强烈建议您多看 PHP 文档,多看 MongoDB 驱动程序文档。我们将开始为您编写此代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多