我在“食物”中的数据记录很少。 schema -mongodb
{
"_id": "5b220199acbec1409cbf84dd",
"Name": "Mongo",
"ID_No": "BA1233",
"Content": "Bottle",
"No_packages": 5,
"No_items": 6,
"Qty": 30,
"Mfg": "2018-05-27",
"Exp": "2018-06-30",
"__v": 0
}
我想获取日期差异(Exp-today Date)小于30的数据集。 我使用以下命令尝试了它。但它没有用。
db.food.find({$lt: { $subtract: [ Date() , Exp ],"30"}} )
答案 0 :(得分:0)
如果我没弄错的话,你想要的文件有Exp - 今天的日期不到30天。换句话说,今天的日期+ 30天> = Exp。将30天转换为毫秒
尝试以下方法:
db.food.aggregate(
{
$project: {
_id: 0,
Name: 1,
exp_date_calc: new Date(ISODate().getTime() + 30 * 24 * 60 * 60 * 1000).toISOString()
},
}, {
$match: { exp_date_calc: { $gt: "$Exp" } }
}
);
或者可能是这个:
db.food.aggregate(
{
$project: {
_id: 0,
Name: 1,
expdate: {
$dateFromString: {
dateString: '$Exp'
}
},
exp_date_calc: new Date(ISODate().getTime() + 30 * 24 * 60 * 60 * 1000)
},
}, {
$match: { exp_date_calc: { $gte: "$expdate" } }
}
);
答案 1 :(得分:0)
您需要先使用$dateFromString
(aggregation)
将日期从字符串转换为日期格式,然后$redact (aggregation)
以删除不匹配的文档
db.collection.aggregate([
{ "$addFields": {
"date": {
"$dateFromString": {
"dateString": "$EXP"
}
}
}},
{ "$redact": {
"$cond": [
{ "$lt": [
{ "$divide": [
{ "$subtract": [new Date(), "$date"] },
1000 * 60 * 60 * 24
]},
30
]},
"$$KEEP",
"$$PRUNE"
]
}}
])