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。我将用这个更新我的问题。是的,这基本上回答了我的问题,虽然我使用的是管道,但我从这里提取了让我困惑的部分。非常感谢。