如何在MongoDB中获取两个不同日期和时间之间的数据

qqrboqgw  于 2023-01-04  发布在  Go
关注(0)|答案(2)|浏览(185)

如何在MongoDB中获取两个不同日期和时间之间的数据

[
      {
        "key":"2",
        "start_date": "2023-01-03T03:30:00.000Z",
        "end_date": "2023-01-03T05:30:00.000Z",
        
      },
      {"key":"1",
        "start_date": "2023-01-04T03:30:00.000Z",
        "end_date": "2023-01-04T05:30:00.000Z",
        
      },
      {
        "key":"1",
        "start_date": "2023-01-05T03:30:00.000Z",
        "end_date": "2023-01-05T05:30:00.000Z",
        
      }
    ]

    db.collection.find({
      {"key":"2"},
      $or: [
        {
          start_date: {
            $gte: "2023-01-04T04:30:00.000Z",
            $lte: "2023-01-04T05:00:00.000Z"
          }
        },
        {
          end_date: {
            $lte: "2023-01-04T05:00:00.000Z",
            $gte: "2023-01-04T04:30:00.000Z"
          }
        }
      ]
    })

我在数据库中有两个集合星期一上午10点到晚上11点星期二上午10点到晚上11点星期五上午11点到晚上12点我将如何得到结果,如果我找到星期一上午10:30到上午10:45,我想btwn时间的结果也。查询应返回-

[{
        "key":"2",
        "start_date": "2023-01-04T03:30:00.000Z",
        "end_date": "2023-01-04T05:30:00.000Z",
        
      }]
up9lanfz

up9lanfz1#

密钥2的开始日期为“2023-01- 03 T03:30:00.000Z”,结束日期为“2023-01- 03 T05:30:00.000Z”,因此如果您查询

$or: [
    {
      start_date: {
        $gte: "2023-01-04T04:30:00.000Z",
        $lte: "2023-01-04T05:00:00.000Z"
      }
    },
    {
      end_date: {
        $lte: "2023-01-04T05:00:00.000Z",
        $gte: "2023-01-04T04:30:00.000Z"
      }
    }
  ]

这显然与您应用的过滤器不匹配,您必须从“2023-01- 03 T03:30:00.000Z”开始日期,还请使用$和运算符。$或运算符将匹配任何开始日期或结束日期。但如果您想获得同时匹配这两个条件的记录,则必须使用$和。

vuktfyat

vuktfyat2#

这不是一个答案,但把它作为评论有点困难。
您需要清楚地定义“两个不同日期和时间之间”的含义。当您的数据包含start_dateend_date,并且您的查询也包含日期范围(即开始和结束)时,您可以有6个不同的条件。下表显示了这些条件:

start_date         end_date         
    ------------------------------------------> time
(1)  x     x   |                |             
(2)        x   |           x    |             
(3)            |     x     x    |             
(4)            |     x          |    x        
(5)        x   |                |    x        
(6)            |                |    x    x

你需要定义它们中的哪一个被认为是真和假。条件(1)和(6)肯定是false,但其他的呢?
在高级情况下,您还必须考虑缺少start_dateend_date的文档。

start_date       undefined
    ------------------------------------------
(7)  x     x   |                             
(8)        x   |           x                 
(9)            |     x     x                 

           undefined         end_date         
    ------------------------------------------
(10)  x     x                   |             
(11)        x                   |    x        
(12)                            |    x    x

相关问题