Mongodb& Symfony QueryBuilder

时间:2015-12-02 08:43:19

标签: mongodb symfony query-builder

有人知道在哪里可以找到有关Symfony2中Mongodb QueryBuilder的一些信息吗?也许是一些例子或一些教程。 我用Google搜索了问题,但没有找到足够好的东西.. 更具体地说,我想基于嵌入的文档检索文档中的字段。 以下是文档示例:

{
"name":"Foo",
"age":"25",
"gender":"Male",
"products":[
        {
            "name":"Apple",
            "price":"12.00",
            "date":"2015-12-02"
        },
        {
            "name":"Banana",
            "price":"9.00",
            "date":"201-11-31"
        },
]

}

我想根据产品数组中的日期检索名称“Foo”。 目前我使用distinct()列出产品中的所有字段。

1 个答案:

答案 0 :(得分:1)

Simple doctrine mongodb example for EmbedMany in symfony

假设League可能有一个或多个Team s,因此在您的情况下它是Embed Many。完整的例子如上。如果您想了解更多信息,我认为first 5 posts对您来说足够了。

示例用法

->findOneByProperty('name', 'Premiership')

<强> REPO

use Doctrine\ODM\MongoDB\DocumentRepository;

class LeagueRepository extends DocumentRepository
{
    /**
     * @param string $field
     * @param string $data
     *
     * @return array|null|object
     */
    public function findOneByProperty($field, $data)
    {
        return
            $this->createQueryBuilder('League')
                ->field($field)->equals($data)
                ->getQuery()
                ->getSingleResult();
    }
}

DUMMY DATA

db.getCollection('league').find({})
/* 1 */
{
    "_id" : ObjectId("564fa07add576ebcf90041ac"),
    "name" : "Super Lig",
    "createdAt" : ISODate("2015-11-20T22:36:42.000Z")
}

/* 2 */
{
    "_id" : ObjectId("564fa081dd576ebbf90041ad"),
    "name" : "Premiership",
    "createdAt" : ISODate("2015-11-20T22:36:49.000Z"),
    "updatedAt" : ISODate("2015-11-20T22:37:33.000Z"),
    "teams" : [ 
        {
            "_id" : ObjectId("564fa0a6dd576ef2f80041ad"),
            "name" : "Arsenal",
            "createdAt" : ISODate("2015-11-20T22:37:26.000Z")
        }, 
        {
            "_id" : ObjectId("564fa0addd576ebaf90041ad"),
            "name" : "Liverpool",
            "createdAt" : ISODate("2015-11-20T22:37:33.000Z")
        }
    ]
}