基本的に、コマンドラインで実行すると正しい結果が返されるため、次のクエリを実行しようとしています。
db.order_in_progress.find({ "orderProducts.carrierAccount.$id" : "50db39141311fa9421000000" });
ただし、doctine2 を使用して正しいクエリを作成することはできません。私の現在のクエリは以下のとおりです。
$qb = $this->createQueryBuilder();
$qb->find($this->getClassName());
$qb->field('orderProducts.carrierAccount.$id')->equals(new \MongoId($carrierAccount->getId()));
return $qb->getQuery()->execute();
その結果、次のクエリが実行されます。
db.order_in_progress.find({ "orderProducts.carrierAccount": ObjectId("50db39141311fa9421000000") })
\MongoID のものを削除すると、代わりに次のクエリになります。これはより近いですが、フィールド名の「$id」の部分を切り捨てています。
db.order_in_progress.find({ "orderProducts.carrierAccount": "50db39141311fa9421000000" })
関連する親ドキュメント (クエリしているドキュメント) は次のようになります。(無関係なフィールドを削除しました)
{
"_id" : 148,
"orderProducts" : [{
"carrierAccount" : {
"$ref" : "carrier_account",
"$id" : ObjectId("50db39141311fa9421000000"),
"$db" : "dev"
},
}, {
"carrierAccount" : {
"$ref" : "carrier_account",
"$id" : ObjectId("50db39141311fa9421000000"),
"$db" : "cerberus_dev"
}],
}
ヘルプ!