Php mongodb更新或插入子数组
好的,我需要做以下事情 我把mongo收集作为Php mongodb更新或插入子数组,php,arrays,mongodb,sub-array,Php,Arrays,Mongodb,Sub Array,好的,我需要做以下事情 我把mongo收集作为 array ( '_id' => new MongoId("50513d8338fc5de706000000"), 'offers' => array ( '0' => array ( 'minspend' => '50.00', 'cashback' => '1.50', 'percentage' => '0.03', ), '
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',
)
))
);
提供。0
指数组中的第0(=第一个)元素。如果要更新第二个,可以使用offers.1
作为键
对于第二个问题,我假设您希望将MongoId添加到子文档中。您也可以用同样的方法,只需在minspend之前添加'Offer_id'=>new MongoId(),
。这将创建一个新的唯一MongoId并将其添加到子文档中。如果要添加现有的MongoId,请使用新MongoId(“…”
,并将…
替换为24个十六进制字符的长字符串
如果您已经有一个Offer\u id,并且只想更改与该id匹配的Offer,则可以使用positional$语法:
$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',
)
))
);
您可以查询具有正确
\u id
的文档,还可以查询优惠。优惠id
。在命令的更新部分,您可以使用offers.$
其中,$将自动匹配包含Offer\u id的正确子文档。如果我有offers.[]。Offer\u id我可以使用它来更新minspend等吗?在这种情况下,在查询中使用Offer\u id作为第二个条件(查询_id和offers.offer_id,并使用$sign作为位置参数。请参见此处位置运算符的工作原理:请您解释一下。通过一个示例,文档确实没有帮助。我已将其添加到上面的代码示例中。我希望这能回答您的问题。