Node.js 需要比较mongodb中的两个不同日期字段

Node.js 需要比较mongodb中的两个不同日期字段,node.js,mongodb,mongodb-query,Node.js,Mongodb,Mongodb Query,我的Mongo数据库中有两个日期字段,我想将它们的差异(即它们的“年龄”)与以年为单位的值进行比较 例如:我想找到年龄超过15岁的药店 (CurrentDate-EstableDate)>15(请记住CurrentYear,因为它可能不是今天的日期) 这样做的方法是什么 下面文档的样本数组: [ { "Pharmacy": "a", "EstablishedDate": ISODate("2006-10-12"), "CurrentDate": ISODate("20

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

例如:我想找到年龄超过15岁的
药店

(CurrentDate-EstableDate)>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"
      }
    ]
  }
]

你可以在下面试试

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

请检查此聚合查询:

db.test.aggregate([
    {
    "$redact": {
        "$cond": [{
            "$gt": [{ 
                "$divide": [{
                    "$subtract": ["$CurrentDate", "$EstablishedDate"] },
                    1000 * 60 * 60 * 24 * 365
                ]},
            15
            ]},
            "$$KEEP",
            "$$PRUNE"
            ]
        }
    }
])
这里我们将减去
当前日期
已建立日期
,并找出它们之间的年差。如果大于15,则仅显示它们


试试这个&告诉我它是否对您有效。

您可以使用日期-时间操作符提取年份

差不多

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

您可以使用聚合管道及其
$subtract
运算符:在查找查询中使用聚合表达式。作为旁注,将CurrentDate作为文档的属性是非常不寻常的。无法想象一个不同文档的时间流动不同的用例。@Alexlex是的,当前日期有误导性。认为它是一个日期字段,绝对比药房老。如果让事情变得更清楚的话,我会修改它。那么你的意思是我们需要找到“确定日期”大于“当前日期”的药店吗?不,我需要(当前日期-确定日期)>15。我将用这个更新我的问题。是的,这基本上回答了我的问题,虽然我使用的是管道,但我从这里提取了让我困惑的部分。非常感谢。