0

XMLファイルからの情報を保存するためにMongoDB(バージョン2.4.1)を使用しています。XML 解析プロセス中に、アイテムの説明ごとに SimpleXMLElement を作成します。新しいドキュメントを挿入するためのコードは次のとおりです。

$response = $collection->insert($object, array('safe'=>true, 'fsync'=> true)),

$object は SimpleXMLElement タイプです。

問題は、挿入されたドキュメントの ID を取得する必要があることですが、挿入操作の後に取得しようとすると、NULL が返されます。

$response = $collection->insert($object, array('safe'=>true, 'fsync'=> true)),
die(var_dump($object));

「挿入」操作の予想される動作ですか?

4

2 に答える 2

1

あなたが指摘stdclassしたように動作し、ドライバーは_idオブジェクトにフィールドを正常に設定します。これは、stdclassが連想配列に似ており、そのプロパティを連想配列と同じようにパブリックに設定できるためです。

SimpleXMLElementコメントに記載されているように、実際にはオブジェクトではありません。

SimpleXMLElement の扱いが難しいのは、オブジェクトのように感じて動作するが、実際にはシステム リソース (具体的には libxml リソース) であるということです。

http://php.net/manual/en/class.simplexmlelement.php

さらにコメントで:

そのため、SimpleXMLElement を $_SESSION に格納したり、ノード値を何らかのタイプのオブジェクトに最初にキャストすることなく直接比較操作を実行したりすることはできません。$_SESSION は「オブジェクト」を格納することを想定しており、比較演算子は 2 つの「オブジェクト」を比較することを想定しており、SimpleXMLElements はオブジェクトではありません。

このことを念頭に置いてSimpleXMLElement、それが機能する前に、オブジェクトをリソースからキャストする必要があると思います。stdclassただし、これを使用しても、オブジェクトが簡単にシリアル化できない場合、オブジェクトを挿入する方法をドライバーが正確に理解するのは難しいでしょう。

于 2013-06-03T09:50:03.390 に答える