ホームページ > バックエンド開発 > PHPチュートリアル > php怎样在Mongodb中查询一个每年都重复的日程呢?

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

WBOY
リリース: 2016-06-06 20:44:41
オリジナル
1194 人が閲覧しました

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

回复内容:

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

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

比如加一个字段:

<code class="lang-json">{
  "repeat_date": {
    "month": 5,
    "day": 1
  }
}
</code>
ログイン後にコピー

查询的时候就可以写:

<code class="lang-javascript">// 找到所有月份为 5 的
db.foo.find({"repeat_date.month": 5})
</code>
ログイン後にコピー

这个 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>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート