我正在尝试仅对满足特定条件的某些数组元素进行投影,但我得到的是整个文档。
这就是我想要做的:我想选择每个类别及其相应的嵌入式 作业,这些作业只有激活而不过期。
这是我到目前为止所尝试的:
$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 查询的任何帮助?
以下是作业数组中包含一个子文档的文档的样子:
{
"_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"
}