【问题标题】:Select all object have date between two date on fields value of mongodb选择所有对象在 mongodb 的字段值上的两个日期之间具有日期
【发布时间】:2019-08-23 10:33:51
【问题描述】:

我从 mongodb 获取数据有点麻烦。我有一个这样的集合:

    Activities = [
          ... some another activity object item ... ,

          {
              type: "special"
              dates: {
                  begin: ISODate("2019-07-07T17:00:00.000Z"),
                  end: ISODate("2019-07-20T17:00:00.000Z"),
                  note: ""
              },
              status: "pending"
          } ,
          ,
          {
              type: "event"
              dates: {
                times: {
                    from: "12:00",
                    to: "15:00"
                  },
                  begin: ISODate("2019-07-21T17:00:00.000Z"),
                  end: ISODate("2019-08-29T17:00:00.000Z"),
                  note: ""
              },
              status: "pending"
          } ,

          ... some another activity object item ...
      ]

我想获取所有活动数据: dates.begin

_Activities.find({
        "dates.end" : {
            $lte : "2019-08-31T17:00:00.000Z"
        },
        "dates.begin" : {
            $gte : "2019-07-15T17:00:00.000Z"
        }
    }, callback);
// return [];


_Activities.find({
        "dates.end" : {
            $lte : "2019-08-30T17:00:00.000Z"
        }
    }, callback);
// return [] too;

我不知道我错在哪里,任何人都有解决方案来帮助我:(((感谢您抽出宝贵时间。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    因为您的字段类型为Date,所以您需要传递Date 进行比较。这样的事情可能会奏效:

    $lte : new Date("2019-08-31T17:00:00.000Z")
    

    【讨论】:

    • 我在两天内被这个麻烦弄得筋疲力尽了,现在开始工作了,非常感谢你。祝你有美好的一天
    • 我能知道您使用的是哪个版本的猫鼬吗?
    • 是的,我用的是mongoose v5.6.6,这个版本有什么需要注意的朋友
    • 我只是觉得奇怪,因为我在我的项目中对 Date 进行了一些查询,但它仍然有效。也许你的项目有些不同。
    【解决方案2】:

    您可以将日期作为 javascript Date 对象传递,它将起作用

    dates: {
      end: { $lte: new Date('2019-08-31T17:00:00.000Z') } ,
      begin: { $gte: new Date('2019-07-15T17:00:00.000Z') }
    }
    

    【讨论】:

    • 亲爱的朋友,谢谢你的解决方案,我试过这种方式但仍然返回一个空数组,也许 mongoosejs 不支持这种情况,但我们可以像 'dates.begin' 一样使用:{ $ gte: new Date('2019-07-15T17:00:00.000Z') } 和 'dates.end' : { $gte: new Date('2019-07-15T17:00:00.000Z') } 。非常感谢你抽出时间;)
    • 抱歉,这就是它无法与您合作的原因stackoverflow.com/a/16002726/6113960
    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多