Doctrine2 - 如何只选择符合MongoDB标准的数组元素

时间:2013-11-09 18:53:02

标签: php mongodb symfony doctrine-orm database

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

以下是我要做的事情:我想选择每个类别及其相应的嵌入式 作业,只有ACTIVATED和NOT EXPIRED

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

$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查询的任何帮助?

以下是 jobs 数组中包含一个子文档的文档:

{
    "_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"
}

0 个答案:

没有答案