16

「params」コレクションには、次のようなドキュメントが 1 つあります。

{
  "_id": ObjectId("4d124cef3ffcf6f410000037"),
  "code": "color",
  "productTypes": [
    {
      "$ref": "productTypes",
      "$id": ObjectId("4d120a2d2b8d8d3010000000"),
      "$db": "test"
    }
  ]
}

参照ドキュメントは次のとおりです。

{
  "_id": ObjectId("4d120a2d2b8d8d3010000000"),
  "code": "car"
}

DoctrineODM を使用して、「productType」が「car」である「param」ドキュメントを取得しています。私はこのコードを使用しています:

$query = $dm->createQuery('Cms\Model\Param');
$query->field('productTypes.code')->equals('car');
$result = $query->execute();
var_dump($result);

しかし、結果は空の配列です。これどうやってするの?

4

3 に答える 3

7

ReferenceManyまたはReferenceOneを使用している場合、参照ドキュメントIDを除いて、参照ドキュメントフィールドでクエリを実行することはできません。

code参照されたコレクションからのクエリが必要な場合は、EmbedManyの代わりに使用する必要がありますReferenceMany

この場合、ドキュメントは次のようになります。

{
  "_id": ObjectId("4d124cef3ffcf6f410000037"),
  "code": "color",
  "productTypes": [
     {
       "_id": ObjectId("4d120a2d2b8d8d3010000000"),
       "code": "car"
     }
  ]
}

そして、次のクエリが機能します。

$query = $dm->createQuery('Cms\Model\Param');
$query->field('productTypes.code')->equals('car');
$result = $query->execute();
var_dump($result);

また、ProductTypeコードが一意である場合はMongoId、の代わりにそれを使用できます。この場合、$idでクエリを実行できます。

{
  "_id": ObjectId("4d124cef3ffcf6f410000037"),
  "code": "color",
  "productTypes": [
    {
      "$ref": "productTypes",
      "$id": 'car',
      "$db": "test"
    }
  ]
}

参照ドキュメント:

{
  "_id": 'car'
}

クエリ:

$query->field('productTypes.$id')->equals('car');
于 2011-06-01T07:01:39.503 に答える