【问题标题】:mongoose - Find by created time irrelevant of date猫鼬 - 按与日期无关的创建时间查找
【发布时间】:2020-11-14 01:59:31
【问题描述】:

我有以下猫鼬模型

const Post = new Schema({
  created_at: { type: Date, default: Date.now() },
  updated_at: { type: Date },
  postName: String,
  postContent:String,
  promoted: {
    isPromoted: { type: Boolean, default: false, required: true },
    promotedFrom: { type: Date },
    promotedTill: { type: Date },
  },
});

示例文档

const Post = new Schema({
  created_at: 2020-07-05T16:16:38.139+00:00,
  postName: My first Post,
  postContent:This is my furst post,
  promoted: {
    isPromoted: true,
    promotedFrom: 2020-11-13T16:14:38.139+00:00,
    promotedTill: 2020-11-20T16:14:38.139+00:00,
  },
});

使用mongose,我想查询promotedTill 时间在12.00 到16.30 之间的文档,无论日期如何。

提前致谢。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    调整gtlt 以包含/排除边界:

    db.foo.aggregate([
    {$match: {$expr: {
                $and: [
    {$gt: [ {$hour: "$promoted.promotedTill"}, 12 ]},
    {$lte: [{$hour: "$promoted.promotedTill"},16]},
    {$lt: [{$minute: "$promoted.promotedTill"},30]}
                        ]}
        }}
    
      ]);
    

    【讨论】:

      【解决方案2】:

      检查这个example

      我的查询很简单,没有其他字段。

      查询是这样的:

      db.collection.find({
        "$and": [
          {
            "promoted.promotedFrom": {
              "$gte": ISODate("yourdate")
            }
          },
          {
            "promoted.promotedTill": {
              "$lte": ISODate("yordate")
            }
          }
        ]
      })
      

      基本上是使用$gte(大于或等于)和$lte(小于或等于)搜索范围内的值。

      使用$and 运算符,这两个条件都应该为真。

      【讨论】:

      • 感谢您的回答。我需要在日期中按小时过滤文档。不是数字
      • 我添加了一个带日期的示例。但是,正如我所说,完全一样。 Mongo 以相同的方式处理日期和数字比较。因此,如果查询可以比较数字,它将适用于日期。检查第二个例子。
      • 从您的第二个示例中,您已按日期过滤,这将为我提供开始日期和结束日期之间的所有文档。但我的要求是按开始时间和结束时间过滤。
      • 您可以将您想要的日期放入查询中。您可以在 js 或您想要的任何内容中创建一个日期并将其传递给 mongo 查询。这是你的问题还是我误解了什么?
      • 问题被误解了。如果我的起始时间是 12.00,到时间是 16.30,则不应检索时间为 11.59 的文档
      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2014-07-14
      • 2021-01-14
      • 1970-01-01
      相关资源
      最近更新 更多