0

我正在尝试仅对满足特定条件的某些数组元素进行投影,但我得到的是整个文档。

这就是我想要做的:我想选择每个类别及其相应的嵌入式 作业,这些作业只有激活而不过期。

这是我到目前为止所尝试的:

$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"
}
4

0 回答 0