特定の基準を満たす特定の配列要素のみの射影を作成しようとしていますが、返されるのはドキュメント全体です。
ここで私がやろうとしていることは次のとおりです。アクティブ化され、期限切れになっていない、対応する埋め込みジョブを含むすべてのカテゴリを選択したいと考えています。
これが私がこれまでに試したことです:
$qb->field('jobs')->exists(true)
->expr()->elemMatch($qb->field('jobs.expires_at')->gt(new \DateTime())->field('jobs.is_activated')->equals(false));
結果は次のとおりです。
db.categories.find({ "jobs": { "$exists": true }, "jobs.expires_at": { "$gt": new ISODate("2013-11-09T20:47:54+02:00") }, "jobs.is_activated": false }).limit(10).skip().sort([ ]);
しかし、私が実際に欲しいのは:
db.categories.find({$exists:{"jobs":true}}, {"name":1, "slug":1, "jobs":{$elemMatch:{"expires_at": { "$gt": new ISODate("2013-11-09T20:47:54+02:00") }, "is_activated": true}}}});
上記の MongoDB クエリの結果となる API クエリを作成する方法について何か助けはありますか?
ジョブ配列に 1 つのサブドキュメントを含むドキュメントは次のようになります。
{
"_id" : ObjectId("527d00c910fedfbf7d8b4595"),
"jobs" : [
{
"_id" : ObjectId("527d00c910fedfbf7d8b4584"),
"type" : "full-time",
"company" : "Company 30",
"position" : "Web Developer",
"location" : "Paris, France",
"description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit.",
"how_to_apply" : "Send your resume to lorem.ipsum [at] dolor.sit",
"token" : "17ae043a3969497bce433166fcec77ee0ccb2d5d",
"is_public" : true,
"is_activated" : true,
"email" : "jobnumber30@example.com",
"expires_at" : ISODate("2013-12-08T15:18:33Z"),
"created_at" : ISODate("2013-11-08T15:18:33Z"),
"updated_at" : ISODate("2013-11-08T15:18:33Z")
}
],
"name" : "Administrator",
"slug" : "administrator"
}