0

私はSymfony2でDoctrineMongoDBOBundleを使用しています。

他のドキュメント価格への注釈referenceOneを持つドキュメント製品があります。

queryBuilderでフェッチするときに価格で並べ替えたい。

$qb = $dm->createQueryBuilder('MyBundle:Product')
->field('geocoordinates')
->near('lat','lon')
->sort('hasPrice','desc')

しかし、これは機能しません。おそらく近くの使用のために?

ドキュメント価格のtoString()メソッドに依存しますか?

よろしく。

4

2 に答える 2

2

私は注釈 referenceOne to other Document Price を持つ Document Product を持っています。

MongoDB には結合がなく、Doctrine がここでクライアント側の集約とソートを行うとは思えません。そのため、これはとにかく機能しません。

ただし、並べ替えは$nearコマンド ( http://docs.mongodb.org/manual/reference/operator/near/ ) で機能します。これは、この場合 Doctrine が使用する必要があるものです。ここでは$near、コマンドを通じて識別されるための明示的なサポートを確認できます。あなたが使用している: https://github.com/doctrine/mongodb/commit/59f73cde2c15d171ff39afbf46c1a1339a51048cしたがって、問題はリンクされたドキュメントであり、MongoDB には JOIN がありません。

于 2012-12-14T14:37:59.507 に答える
0

この場合、hasPriceおそらくprice参照が null かどうかをチェックするメソッドに対応しているように見えます。ODM クエリでフィールドを参照する場合、クラス プロパティの名前は MongoDB フィールド名に変換される場合がありますが (異なる場合)、メソッド評価はサポートされていません。Doctrine はクライアント側の集計やソートを行わないという Sammaye の指摘は正しかったです。

別の方法として、フィールドで並べ替えることができる場合がありますprice.$id。これにより、結果で存在しない値がグループ化されます。同様に、$exists演算子を使用して、ドキュメントが実際に参照されたかどうかに基づいて一致/除外することができます。ODM の参照 (「Simple」タイプを除く) はMongoDBRef$idインスタンスとして保存され、$ref、 、$dbフィールドを持つオブジェクトに変換されます。その結果、ドキュメント内の他のフィールドと同じように、これらの値に対してクエリを実行できます。

于 2012-12-19T22:35:24.480 に答える