【问题标题】:Doctrine2 Mongodb adding more $or operatorDoctrine2 Mongodb 添加更多 $or 运算符
【发布时间】:2011-09-17 04:53:54
【问题描述】:

doctrine2 ODM 可以创建以下查询吗?

db.Product.find({ "$or": [ { "name": new RegExp("test*", "i") }, { "tags": new RegExp("public true*", "i") } ], "$or": [{ "public": false, "_id": { "$in": [ ObjectId("4e74121c4fcfa9ff7ac90000"), ObjectId("4e74121c4fcfa9ff7ac80000") ] } }, { "public": true }] });

我不明白的关于教义2 的主要问题是如何在 $query 中添加加法 $or?

这有助于我使用仍然缺少的 $and 运算符。

我目前正在使用 Symfony2 Doctrine2 Mongodb

【问题讨论】:

    标签: mongodb doctrine-orm symfony mongodb-php


    【解决方案1】:
    /**
     * Adds an "or" expression to the current query.
     *
     * You can create the expression using the expr() method:
     *
     *     $qb = $this->createQueryBuilder('User');
     *     $qb
     *         ->addOr($qb->expr()->field('first_name')->equals('Kris'))
     *         ->addOr($qb->expr()->field('first_name')->equals('Chris'));
     *
     * @param array|QueryBuilder $expression
     * @return Builder
     */
    
    
    
    /**
     * Adds an "and" expression to the current query.
     *
     * You can create the expression using the expr() method:
     *
     *     $qb = $this->createQueryBuilder('User');
     *     $qb
     *         ->addAnd($qb->expr()->field('first_name')->equals('Kris'))
     *         ->addAnd($qb->expr()->field('first_name')->equals('Chris'));
     *
     * @param array|QueryBuilder $expression
     * @return Query
     */
    

    【讨论】:

      【解决方案2】:

      理论之外的一个小例子:

      查询meta-language:

      <condition1> AND (<field1 == value1> OR <field2 == value2>)
      

      用 Doctrine 的QueryBuilder查询:

      $queryBuilder
          ->addAnd(<condition1>)
          ->addAnd(
              $queryBuilder
                  ->expr()
                  ->addOr(
                      $queryBuilder
                          ->expr()
                          ->field('field1')
                          ->equals('value1')
                  )->addOr(
                      $queryBuilder
                          ->expr()
                          ->field('field2')
                          ->equals('value2')
                  )
          );
      

      【讨论】:

        猜你喜欢
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多