Heim > Backend-Entwicklung > PHP-Tutorial > php怎样在Mongodb中查询一个每年都重复的日程呢?

php怎样在Mongodb中查询一个每年都重复的日程呢?

WBOY
Freigeben: 2016-06-06 20:44:41
Original
1178 Leute haben es durchsucht

需求是查询一段日期内的日程,有的日程是每年(月、日)重复的,怎样在一次find中取到期间内的日程呢?
重复的意思是,添加的今年5月1日的日程,我查询明年4到5月日程的时候,还是可以查到他
希望能够给个思路

回复内容:

需求是查询一段日期内的日程,有的日程是每年(月、日)重复的,怎样在一次find中取到期间内的日程呢?
重复的意思是,添加的今年5月1日的日程,我查询明年4到5月日程的时候,还是可以查到他
希望能够给个思路

如果有这种需求,那就应该在存数据的时候多存一些字段用来表达“月”和“日”的信息,这和 php 没关系,只是 mongodb 数据结构的设计问题。

比如加一个字段:

<code class="lang-json">{
  "repeat_date": {
    "month": 5,
    "day": 1
  }
}
</code>
Nach dem Login kopieren

查询的时候就可以写:

<code class="lang-javascript">// 找到所有月份为 5 的
db.foo.find({"repeat_date.month": 5})
</code>
Nach dem Login kopieren

这个 repeat_date 字段仅在每年重复的日程上添加,对于不重复的日程不需要添加。

如果需要同时查出某个时间段中所有日程,包括每年重复的日程,可以这样查询:

<code class="lang-javascript">// 假设每个日程都有一个类型为 `ISODate` 的 `date` 字段表示日程发生在哪一天
db.schedule.find({
  $or: [
    {
      date: {
        $gte: new Date("2014-03-01 00:00:00"),
        $lt: new Date("2014-05-01 00:00:00")
      },
    },
    {
      "repeat_date.month": {
        $gte: 3,
        $lt: 5
      }
    }
  ]
})
</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage