如何检查表中是不是已经存在时间限制?

Posted

技术标签:

【中文标题】如何检查表中是不是已经存在时间限制?【英文标题】:How to check whether time limit already exist in table?如何检查表中是否已经存在时间限制? 【发布时间】:2018-06-03 19:39:31 【问题描述】:

我在表 academicyearTbl 中的 mongodb 数据库中有很多记录,例如

 "_id": ObjectId("5a3b41581d78593809000029"),
 "academicyear_id": 67,
  "academicyearname": "2017",
  "startson"▼: "01/01/2017",
  "endson": "12/31/2017",
  "graceperiod": "12/14/2017",
 "status": "active", 

我正在尝试调整以下代码

代码:

      class settingsModel
      
      function testcode()
      
      $this->collection = $this->db->academicyearTbl;
      $query4 = array('startson'=> $this->startson,'endson' => $this->endson);
      $count4 = $this->collection->find($query4)->count();
      if($count4 > 0)
      
        //show message
      
      else
      
         // allow inserting the new record
      
      
      
      $foo = new settingsModel();
      $foo->academicyearname ="2018"
      $foo->startson="06/02/2017";
      $foo->endson="12/01/2017";
      $foo->testcode();

我是mongodb 的新手,我能够得到任何灵感来比较是否 输入的新开始日期和结束日期不应属于数据库中已有的时间段。

例如 如果用户将输入新数据,例如

      $foo->academicyearname ="2018"
      $foo->startson="06/02/2017";
      $foo->endson="12/01/2017";

那么应该不允许插入,因为前面提到的表中已经有数据了。

请帮忙!!!

【问题讨论】:

【参考方案1】:

您应该将两个日期设置为\DateTimeImmutable,然后您可以在检查间隔时将$gt$lt 运算符用于MongoDate(已过时),如下所示:

class settingsModel

    function testcode()
    
      $this->collection = $this->db->academicyearTbl;

      $query4 = array(
         'startson'=> array( 
            '$gt' => new MongoDate( $this->startson ),
         ),
         'endson' =>  array( 
            '$lt' => new MongoDate( $this->endson ),
         ),
      );

      $count4 = $this->collection->find($query4)->count();
      if($count4 > 0)
      
        //show message
      
      else
      
         // allow inserting the new record
      
  
 

$foo = new settingsModel();
$foo->academicyearname ="2018";
$foo->startson = strtotime("2017-02-06"); //notice the date format
$foo->endson = strtotime("2017-01-12"); //notice the date format
$foo->testcode();

附:您的代码需要大量其他重构

【讨论】:

感谢您的回答......你的意思是我必须将日期转换为时间戳 $mongosd = new MongoDate(strtotime($this->startson)); $mongoed = new MongoDate(strtotime($this->endson)); 您需要有\MongoDB\BSON\UTCDateTime 用于在 MongoDB 中插入的日期 是的,您需要以某种方式(通过使用时间戳或\DateTimeImmutable)生成\MongoDB\BSON\UTCDateTime 并将其存储在数据库中 不知道你用的是什么版本的mongodb;使用系统上可用的任何类型

以上是关于如何检查表中是不是已经存在时间限制?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查表中是否已存在时间限制?

如何编写一个触发器来检查一个值是不是已经在表中?

如何检查用户是不是存在于数据库表中?

检查后插入多行

Pymongo:如何检查字段是不是存在

在添加Flask,SQLAlchemy之前检查表中的行中的值是不是已经存在