猫鼬+总日期格式问题

时间:2018-10-17 10:21:19

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

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

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

但是当我删除新的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
    }
    ],
    , {}
    )

1 个答案:

答案 0 :(得分:1)

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

类似

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