1

背景:この MongoDB ライブラリで CodeIgniter を使用します。

これは mongodb を使用する最初のラウンドであり、これまでのところ楽しんでいます。SQL の考え方から離れるにはしばらく時間がかかりましたが、現在のプロジェクトにはぴったりです。

を使用して配列をドキュメントにプッシュしようとしています...

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

$newData を使用してエンコードするjson_encode($newData)と、get{"levels":[{"level_qty":12,"level_uom":"ft"}]}

問題は、関数がmeasurementsmongodb ドキュメントに行を作成すると、[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 に答える