【问题标题】:upsert script is not workingupsert 脚本不工作
【发布时间】:2016-10-04 17:46:54
【问题描述】:

我正在尝试让 upsert 工作但没有得到任何结果

我在此脚本之前发布了三个变量。如果我更新,我会得到结果,但我想 upsert 并且没有得到任何结果。

这是我的代码:

if(isset($_POST)){
    if($array){
        $doc = $collection->update(
            array(
                '$set' => array(
                    '_id' => new MongoId(),
                    'organization' => $mysql_org_name,
                    'purch_code' => $mysql_purch_code,
                    'contentname' => $mysql_order_item_name,
                    array('upsert' => true)
                )
            )
        );
    }
}

【问题讨论】:

  • 刚刚注意到你的问题被标记为mongodb,但你所有的变量名都包含mysql。除非a)您在数据库之间迁移或b)这些是对单独存储在MySQL数据库中的东西的引用,否则我会重命名它们。另外,我建议您编辑问题的标题,以包括您实际使用的数据库类型。
  • @cyfur01 你是对的,变量是你的 MySQL_ 预定义的,因为我从 2 个 MySQL 查询中获取它们并试图将它们插入到 mongo 中。我理解这种混淆,但它们只是名称,仅用于此目的并且仅在此脚本中使用。我正在从我的 WP WooCommerce 表中获取 vars,并将它们复制为我针对 mongodb 开发的应用程序。

标签: php mongodb upsert


【解决方案1】:

你在单引号上有变量 $set '$set' => 数组(

【讨论】:

  • $set 是 MongoDB 运算符,而不是变量。它必须用单引号括起来以防止 PHP 执行字符串替换。
【解决方案2】:

Update expects 3 argument arrays。你只通过了一个。

首先,您已将您的选项作为$set 数组的一部分。它们应该在更新子句之后作为单独的参数传递。

此外,您没有匹配条件(即,用于选择要更新的项目的查询语句)。使用 upsert 和 $set 时,将使用两个数组 (see the relevant documentation) 中的字段创建一个新项目。

最后,如果您没有为_id 指定值,Mongo 会为您生成一个。


例如,如果您想根据 organization 字段进行匹配:

if(isset($_POST)){
    if($array){
        $doc = $collection->update(
            array('organization' => $mysql_org_name),
            array(
                '$set' => array(
                    'purch_code' => $mysql_purch_code,
                    'contentname' => $mysql_order_item_name,
                )
            ),
            array('upsert' => true)
        );
    }
}

如果这匹配一个或多个条目,则只有 purch_codecontentname 字段将在第一个匹配对象上更新(要更新多个条目,您必须在选项数组中指定 'multiple'=>true)。如果没有匹配项,将插入一个新条目:

  1. 生成的_id
  2. 所有匹配条件值(即organization
  3. 所有更新运算符值(即purch_codecontentname

【讨论】:

  • 很好的解释@cyfur01。它仍然不起作用,但不是你的问题。在我进入这部分代码之前,我遇到了问题。我仍然将您的解决方案标记为正确,因为您在解释 upsert 过程方面确实做得很好。谢谢大佬!
猜你喜欢
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2017-04-11
  • 2018-01-25
相关资源
最近更新 更多