【问题标题】:Mongodb ISODates and $matchMongodb ISODates 和 $match
【发布时间】:2018-08-10 09:20:54
【问题描述】:

目前我有一个设置为 7 月 7 日的 ISODate。我有一个字符串是 7 月 7 日。我正在尝试隔离 InvoiceDate 中的那些特定事件。我试过这个:

$match{InvoiceDate: {"$dateFromParts":{'year':year,'month':month,'day':day}}}

但是,我的数组一直为 NULL。我不知道这里有什么问题。谁能帮帮我。

【问题讨论】:

    标签: node.js mongodb isodate


    【解决方案1】:

    为此使用矩库,在您传递的字符串中指定日期格式:

    /* set to 12:00:00 am 17 July 2018 */
    const start = moment('7-17-2018', 'M-DD-YYYY').startOf('day').toDate(); 
    
    /* set to 11:59:59 pm 17 July 2018 */
    const end = moment('7-17-2018', 'M-DD-YYYY').endOf('day').toDate();
    
    collection.find({ 'invoiceDate': { '$gte': start, '$lte': end }  })
         .toArray((err, data) => console.log(data)) 
    

    或聚合

    collection.aggregate([
        { '$match': {
            'invoiceDate': { '$gte': start, '$lte': end }  
        } } 
    ], (err, data) => console.log(data))
    

    【讨论】:

      【解决方案2】:

      您可以像这样过滤特定日期的 mongodb 文档。

      $match([{invoiceDate:$gte:moment(date_to_check).startOf('day'),$lte:moment(date_to_check).endOf('day')}}])

      试试这个

      【讨论】:

      • 我无法让它工作:我已经输入:$match({invoiceDate:{$gte:moment('7-17-2018').startOf('day'), $lte:moment(date_to_check).endOf('day')}})
      • 您在 endOf day 部分缺少 date_to_check。最重要的是确实安装了像 npm i moment 这样的时刻来使用时刻库​​
      • $match({invoiceDate:{$gte:moment('7-17-2018').startOf('day'),$lte:moment('7-17-2018')。 endOf('day')}}) ---刚刚检查它没有工作一直给我一个关于时刻括号的错误。我也安装了 moment 包。
      • collection.aggregate([{ $match({invoiceDate:{$gte:moment('7-17-2018').startOf('day'),$lte:moment('7- 17-2018').endOf('day')}}) } ])
      猜你喜欢
      • 2016-04-20
      • 2015-06-26
      • 2018-04-28
      • 1970-01-01
      • 2017-08-21
      • 2013-03-10
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      相关资源
      最近更新 更多