1

DoctrineMongoDBBundle を使用していて、いくつかのレコードを取得したいと考えています。私のリポジトリクラスにはコードがあります:

return $this->createQueryBuilder()->field('categories.data')
    ->equals($categoryId)->getQuery()->execute();

プロファイラーのログでは、絶対に機能するクエリが生成されます。

db.recipe.find({ "categories.data": 16 }).sort([ ]);

コンソール クライアント経由でこのクエリを実行すると、レコードが返されます。しかし、リポジトリクラスは何も取得しません。

私のサーバーのログは次のようになります。

query test_database.recipe query: { $query: { categories.data: "2" }, $orderby: {} } ntoreturn:0 keyUpdates:0 nreturned:0 reslen:20 0ms

しかし、プレーンPHPスクリプトを実行して同じデータを取得すると:

<?php 
$mongo = new Mongo();
$col = $mongo->test_database->recipe;

foreach ($col->find(array("categories.data" => 2)) as $r) {
  print_r($r);
}

結果が得られ、サーバーのログは次のようになります。

query test_database.recipe query: { categories.data: 2 } ntoreturn:0 keyUpdates:0 nreturned:1 reslen:1037 0ms

違いは次のとおりです。

クエリ test_database.recipe クエリ: { $query: {categories.data: "2" }, $orderby : {} } ntoreturn:0 keyUpdates:0 nreturned:0 reslen:20 0ms

クエリ test_database.recipe クエリ: {categories.data: 2 } nreturn:0 keyUpdates:0 nreturned:1 reslen:1037 0ms[/quote]

MongoDB 2.1.1 と 1.8.1 の両方のdepsファイルをチェック:

[symfony]
    git=http://github.com/symfony/symfony.git
    version=origin/2.0

[doctrine-common]
    git=http://github.com/doctrine/common.git
    version=2.2.2

[doctrine-dbal]
    git=http://github.com/doctrine/dbal.git
    version=2.1.7

[doctrine]
    git=http://github.com/doctrine/doctrine2.git
    version=2.1.7

[doctrine-mongodb-odm]
    git=http://github.com/doctrine/mongodb-odm.git

[DoctrineMongoDBBundle]
    git=http://github.com/doctrine/DoctrineMongoDBBundle.git
    target=/bundles/Symfony/Bundle/DoctrineMongoDBBundle
    version=origin/2.0
4

1 に答える 1

1

あなたが共有したこのログに基づいて:

クエリ test_database.recipe クエリ: { $query: { Categories.data: "2" }, $orderby: {} } ntoreturn:0 keyUpdates:0 nreturned:0 reslen:20 0ms

クエリ test_database.recipe クエリ: { カテゴリ.データ: 2 } nreturn:0 keyUpdates:0 nreturned:1 reslen:1037 0ms

最初のクエリでは文字列で一致しています"2"が、2 番目のクエリでは整数2で一致しています。これらは MongoDB では同等ではありません。検討:

$ mongo
MongoDB shell version: 2.0.7
connecting to: test
> db.foo.drop()
false
> db.foo.insert({x:1})
> db.foo.find({x:"1"})
> db.foo.find({x:1})
{ "_id" : ObjectId("502fb9f5b6b1fd9f6ea794a4"), "x" : 1 }

$categoryIdクエリビルダーで使用する前に、整数へのキャストを試みましたか?

于 2012-08-18T15:54:56.873 に答える