【问题标题】:Get all records with specified properties between a certain date range获取特定日期范围内具有指定属性的所有记录
【发布时间】:2018-11-08 19:28:27
【问题描述】:

我传入两个日期,格式为MM-DD-YYYY,这是一个日期范围。我需要查询该范围内的所有记录并包含指定的字段。我没有运气。

Mongo 记录的一部分:

{
    "_id": "some ID",
    "date": {
        "$date": "2015-06-26T13:02:12.121Z"
    },

查询:

var Start = '09-07-2015' 

var End = '09-14-2015'

如果我这样做:

    var query = Order.find({
        date : {
            $lt : End,
            $gt : Start
        }
    });

我按预期在周范围内获得了完整的文档。但是,我想指定要返回的字段而不是完整的文档。所以我尝试使用分组和项目来指定这些字段:

    var query = Order.aggregate(
        {
            $match :
            {
                date: {
                    $gte: start,
                    $lt: end
                }
            },
            $group:
            {
                cust_ID: '$request.headers.customer_id',
                wholesaler_ID: '$request.headers.wholesalerID'
            }
        }
    );

同样:我也尝试过使用项目来获得我想要的结果。我想它可能与09-07-2015 这样的日期字符串不匹配,所以我直接包含了 ISO 日期。仍然没有运气...查询返回未定义或为空:

    var query = Order.aggregate(
        {
            $project:
            {
                date: 'date',
                cust_ID: '$request.headers.custID',
                wholesaler_ID: '$request.headers.wholesalerID'
            }
        },
        {
            $match :
            {
                date: {
                    $gte: "2014-12-09T21:02:56.872Z",
                    $lt: "2015-12-09T21:02:56.872Z"
                }
            }
        }
    );

【问题讨论】:

    标签: mongodb date mongoose


    【解决方案1】:
    var query = Order.find({
        date : {
            $lt : End,
            $gt : Start
        }}, {cust_ID:1, wholeseller_ID:1}
    );
    

    这会奏效。

    我刚刚使用 Robomongo 进行了测试

    db.getCollection('offerdb').find({time_posted:{$gt: '2015-10-21T21:40:04+05:30', $lte:'2015-12-14T05:53:14+05:30'}},{_id:1, merchant_id:1})
    

    对我来说就像一个魅力。

    【讨论】:

    • 谢谢。这似乎不起作用。我不认为语法是正确的
    • 我已经发布了我测试过的shell代码,请检查。也许我没有正确编辑代码。
    • 我已经编辑了代码,括号没有正确排序。立即运行。
    【解决方案2】:

    在 mongo shell 中试试这个命令

    use dbname
    
    db.collection_name.find({date: {$gte: ISODate('2015-09-07 00:00:00'), $lte: ISODate('2015-09-14 23:59:59.999999')}},{'cust_ID':1,'_id':0,'wholeseller_ID':1})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多