1

背景:将 CodeIgniter 与此 MongoDB 库一起使用。

这是我第一次使用 mongodb,到目前为止我很享受。我花了一段时间才将自己与 sql 的思维方式区分开来,但它非常适合我目前的项目。

我正在尝试使用...将数组推送到文档中

$this->mongo_db->where(array('_id'=>$estimate_id))->push("measurements", $newData)->update('estimates');

如果我编码 $newData 使用json_encode($newData)我得到{"levels":[{"level_qty":12,"level_uom":"ft"}]}

问题是,当我的函数measurements在 mongodb 文档中创建该行时,它会自动启动一个数组,我在 [0] 处插入。像这样...

"measurements" : [ { "levels" : [ { "level_qty" : 12, "level_uom" : "ft" } ] }]

……留下我……

-measurements
--0
----levels
-----0
------level_qty => 2,
------level_uom => ft

我真正想要的是...

-measurements
--levels
---0
----level_qty => 2,
----level_uom => ft

我确定我错过了一些相当基本的东西(即与 php 相关而不与 mongodb 相关),但我是公认的业余爱好者,涉水太深。

4

1 回答 1

3

$push用于将值附加到数组。在您的示例中,measurements是一个数组,Mongo$newData作为其第一个元素附加。这解释了和0之间的索引。在您想要的结果中,是一个等效于的对象(即它具有一个属性,而该属性又包含一个对象数组)。measurementslevelsmeasurements$newDatalevels

以下示例中的任何一个都应该完成您想要的:

// if $newData is {"levels": [{"level_qty":12,"level_uom":"ft"}]}
->set("measurements", $newData)

// if $newData is [{"level_qty":12,"level_uom":"ft"}]
->set("measurements.levels", $newData)

// if $newData is {"level_qty":12,"level_uom":"ft"}
->push("measurements.levels", $newData)

注意:$push如果您想在将来的更新中附加数据,将会更加灵活,而$set自然会覆盖给定的字段。

于 2012-05-16T18:01:35.877 回答