php - mongodb更新或插入子数组

标签 php arrays mongodb sub-array

好的,我需要离开做以下事情

我将 mongo 收集为

array (
  '_id' => new MongoId("50513d8338fc5de706000000"),
  'offers' => 
  array (
    '0' => 
    array (
      'minspend' => '50.00',
      'cashback' => '1.50',
      'percentage' => '0.03',
    ),
    '1' => 
    array (
      'minspend' => '100.00',
      'cashback' => '3.00',
      'percentage' => '0.03',
    ),
  ),
  'percentageTotal' => '0.06',
  'test' => new MongoInt32(1),
)

但是假设我只想更新这部分

array (
        '0' => 
        array (
          'minspend' => '50.00',
          'cashback' => '1.50',
          'percentage' => '0.03',
        ),

在不重新创建该数组中的整个数据集合的情况下更改子数组的那部分的最佳方法是什么。

有没有可能做这样的事情

array (
        '0' => 
        array (
'Offer_id'=> new MongoId(5715671561715),
          'minspend' => '50.00',
          'cashback' => '1.50',
          'percentage' => '0.03',
        ),

)

最佳答案

您可以使用 $set与点符号一起指定要更新数组的哪个元素:

$collection->update(
    array("_id" => new MongoId("50513d8338fc5de706000000")), 
    array("$set" => array("offers.0" => 
        array (
            'minspend' => '50.00',
            'cashback' => '1.50',
            'percentage' => '0.03',
        )
    ))
);

offers.0指的是数组中的第 0 个(= 第一个)元素。如果你想更新第二个,你可以使用 offers.1作为关键。

对于你的第二个问题,我假设你想将 MongoId 添加到子文档中。你可以用同样的方式做到这一点,只需添加 'Offer_id' => new MongoId(),在最低消费之前。这将创建一个新的唯一 MongoId 并将其添加到子文档中。如果您想添加现有的 MongoId,请使用 new MongoId("...")并替换 ... 24个十六进制字符长字符串。

如果您已经有一个 Offer_id 并且只想更改与该 ID 匹配的报价,您可以使用位置 $ 语法:

$collection->update(
    array("_id" => new MongoId("50513d8338fc5de706000000"),
          "offers.Offer_id" => new MongoId("5059637720dfeda164ec0fe7")), 

    array("$set" => array("offers.$" => 
        array (
            'minspend' => '50.00',
            'cashback' => '1.50',
            'percentage' => '0.03',
        )
    ))
); 

您使用正确的 _id 查询文档另外对于 offers.Offer_id .在命令的更新部分,您使用 offers.$其中 $ 将自动匹配包含 Offer_id 的正确子文档。

关于php - mongodb更新或插入子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468697/

相关文章:

php - 如何在 Laravel5 中更改 View 文件夹?

arrays - Go 或 Rust 中的数组数组?

node.js - 如何查询 Mongoose 中的不同值但返回所有文档?

arrays - 使用没有 segues 的协议(protocol)将数组从 appDelegate 传递到 Viewcontroller

java - 获取字符串在字符串数组中的索引

mongodb - service mongodb start 和 mongod 有什么区别

php - Mongodb展开嵌套文档

PHP MySQL - 从 ID x 开始

php - Magento 类方法覆盖不起作用

php - 无法使用api将数据插入android中的数据库