【问题标题】:Doctrine ODM(MongoDB) - Delete the data createdOn todayDoctrine ODM(MongoDB) - 删除今天创建的数据
【发布时间】:2015-03-03 18:05:59
【问题描述】:

我在教条 ODM 工作。我是学说的新手。实际上我正在尝试从一个集合中删除所有数据,这些数据都是今天使用 querybuilder 插入的。但我无法做到这一点。请帮助我。我正在尝试使用的查询构建器如下,

.....->createQueryBuilder('Document')
           ->remove()
           ->field('active')->equals(1)
           ->where('createdOn')->equals(new MongoDate(date()))
           ->getQuery();

【问题讨论】:

    标签: mongodb doctrine-orm doctrine odm


    【解决方案1】:

    以下:

    new MongoDate(date())
    

    确实有点过于细化,因为您不太可能拥有具有该确切时间戳值的任何东西,而且肯定不是一整天。

    您要查找的是今天和第二天之间的“范围”所以首先计算日期:

      $date = new DateTime();                       # Time right now
      $ts = $date->getTimestamp();
    
      $today = $ts - ( $ts % ( 60 * 60 * 24 ) );    # Round to the day
      $tomorrow = $today + ( 60 * 60 * 24 );        # Add one day to that
    
      $start = new MongoDate( $today );
      $end = new MongoDate( $tomorrow );
    

    然后调用“范围”上的值:

    (...)->createQueryBuilder('Document')
           ->remove()
           ->field('active')->equals(1)
           ->where('createdOn')->range( $start, $end )
           ->getQuery()
           ->execute();
    

    在 MongoDB 查询术语中通常用 $gt$lt 运算符表示,但学说 DSL 有一个组合运算符来表示一个范围。

    【讨论】:

    • @VinothBabu 是 MongoDB 中的“createdOn”一个实际的 BSON 日期对象?如果是这样,它将在 shell 中显示为 ISODate(),或者从 PHP 代码中正确地膨胀为 MongoDate()
    • @VinothBabu 也许我在您的代码中的“剪切和粘贴”中有点字面意思。你有没有打电话给.execute()?除此之外,这里肯定有一些数据问题,错误的集合,查询中的其他条件不匹配。检查这些并检查您的数据。
    • 我已经通过使用 lte 和 gte 作为 ->field('createdOn')->gte($from) 和 ->field('createdOn')->lte($to )
    • @VinothBabu 有趣。不知道为什么 ->range() 会在这里失败,它应该只是同一事物的简写。
    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2012-07-03
    • 2014-08-05
    • 2017-08-13
    • 1970-01-01
    • 2014-05-23
    • 2016-08-26
    相关资源
    最近更新 更多