-6ren">
gpt4 book ai didi

php - mongodb更新或插入子数组

转载 作者:可可西里 更新时间:2023-11-01 09:32:07 25 4
gpt4 key购买 nike

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

我将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com