2015-12-02 62 views
1

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

{ 
"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()来列出产品中的所有字段。

+0

http://doctrine-orm.readthedocs.org/project s/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html – malcolm

+0

感谢Malcolm,我一直在那个页面上,但是我想要一些更复杂的例子,如果它当然存在的话:D –

+0

我建议你改变你的问题,如何实现一些具体的查询,因为现在,如果这个问题应该被关闭或者没有,这是争论的问题: -/ – stevenll

回答

1

Simple doctrine mongodb example for EmbedMany in symfony

假设一个League可能有一个或多个Team太它是一个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(); 
    } 
} 

伪数据

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") 
     } 
    ] 
} 
+0

Wonderfull!非常感谢你。 –

+0

没问题,尽情享受吧。如果它解决了您的问题,请接受它,以便其他人可以从中受益。谢谢 – BentCoder

+0

根据联盟文档给出的例子,你如何显示团队名称的小枝,我试图做$ var.products但不工作,因为它是一个数组。 Symfony如何处理这个问题?我只能获得父文档字段(姓名,年龄性别等),但不能包含产品字段 –