【问题标题】:Mongoose + Aggregate Date Format IssueMongoose + 聚合日期格式问题
【发布时间】:2018-10-17 10:21:19
【问题描述】:

当我在 mongo 中执行以下查询时,它工作正常:

db.getCollection('patients').aggregate({
    "$match": {
    "demographics.dob": new Date("2018-01-17T00:00:00.000Z")
   }
})

但是当我删除 new Date() 时,它不起作用。

db.getCollection('patients').aggregate({
    "$match": {
    "demographics.dob": "2018-01-17T00:00:00.000Z"
   }
})

现在我为什么要删除它是因为当我尝试从 express js 发送日期时,它以字符串格式进行,以下是我的代码:

 filter["demographics.dob"] = new Date(filter["demographics.dob"]).toISOString();

我知道总的来说,类型转换不是在内部完成的,所以请给我建议以其他方式进行的方法:)

以下是猫鼬调试日志的结果:

    patients.aggregate([
    {
        "$project": {
        "demographics.legalFirstName": "$demographics.legalFirstName",
        "demographics.lastName": "$demographics.lastName",
        "updatedAt": "$updatedAt",
        "_id": 1
        }
    },
    {
        "$match": {
        "$and": [
            {
            "demographics.dob": "2018-01-17T00:00:00.000Z"
            }
        ]
        }
    },
    {
        "$sort": {
        "updatedAt": -1
        }
    },
    {
        "$skip": 0
    },
    {
        "$limit": 2
    }
    ],
    , {}
    )

【问题讨论】:

    标签: node.js mongodb express mongoose aggregation-framework


    【解决方案1】:

    在 3.6 版本中使用 $dateFromString 并将 $match 更改为使用 $expr

    类似

    {"$match":{
      "$expr":{
      "$eq":[
        "$demographics.dob",
        {"$dateFromString":{"dateString":"2018-01-17T00:00:00.000Z"}}
      ]
      }
    }}
    

    【讨论】:

    • 非常感谢您的回答,您拯救了我的一天 :) 我今天在这个问题上浪费了 5-6 个小时..
    猜你喜欢
    • 2019-04-15
    • 2015-06-28
    • 2017-10-07
    • 2021-10-16
    • 1970-01-01
    • 2014-01-29
    • 2020-02-01
    • 2011-09-20
    相关资源
    最近更新 更多