需要在mongodb中比较2个不同的日期字段

时间:2018-07-17 10:22:22

标签: node.js mongodb mongodb-query

我的Mongo数据库中有两个日期字段,我想将它们的差异(即它们的“年龄”)与以年为单位的值进行比较。

例如:我想找到15岁以上的Pharmacies

(当前日期-建立日期)> 15(请注意CurrentYear,因为它可能不是今天的日期)  该怎么做?

下面的一系列文档示例:

[
  {
    "Pharmacy": "a",
    "EstablishedDate": ISODate("2006-10-12"),
    "CurrentDate": ISODate("2018-07-17"),
    "Medicine": [
      {
        "MedName": "MedA",
        "Quantity": 55,
        "Type": "Admission"
      },
      {
        "MedName": "MedB",
        "Quantity": 34,
        "Type": "Admission"
      },
      {
        "MedName": "MedD",
        "Quantity": 25,
        "Type": "Discharge",

      }
    ]
  },
  {
    "Pharmacy": "b",
    "EstablishedDate": ISODate("2015-02-02"),
    "CurrentDate": ISODate("2018-07-17"),
    "Medicine": [
      {
        "MedName": "MedB",
        "Quantity": 60,
        "Type": "Critical"
      },
      {
        "MedName": "MedC",
        "Quantity": 34,
        "Type": "mild"
      }
    ]
  }
]

3 个答案:

答案 0 :(得分:2)

您可以使用日期时间运算符$year提取年份。

类似

db.colname.find({"$expr":{
  "$gt":[
    {"$subtract":[
      {"$year":"$CurrentDate"},
      {"$year":"$EstablishedDate"}
    ]},
    15
  ]
}})

答案 1 :(得分:1)

您可以尝试以下汇总

 db.collection.aggregate([
  {
    "$redact": {
      "$cond": [
        {
          "$lt": [
            {
              "$divide": [
                {
                  "$subtract": [
                    "$CurrentDate",
                    "$EstablishedDate"
                  ]
                },
                1000 * 60 * 60 * 24
              ]
            },
            365 * 15
          ]
        },
        "$$KEEP",
        "$$PRUNE"
      ]
    }
  }
])

答案 2 :(得分:0)

请检查此汇总查询:

db.test.aggregate([
    {
    "$redact": {
        "$cond": [{
            "$gt": [{ 
                "$divide": [{
                    "$subtract": ["$CurrentDate", "$EstablishedDate"] },
                    1000 * 60 * 60 * 24 * 365
                ]},
            15
            ]},
            "$$KEEP",
            "$$PRUNE"
            ]
        }
    }
])

在这里,我们减去CurrentDateEstablishedDate并找出它们之间的年差。如果大于15,则只有我们显示它们。

尝试一下,让我知道它是否对您有用。