我目前只是试图使用Mongoose与Node.js和MongoDb来解决某个问题。我在我的mongodb计划集合中有记录,计划日期分为3个不同的字段,一个用于存储年份,一个用于月份,一个用于日期 - 所有数字字段。例如,日期7/4/2014将按如下方式存储:
_id: fjewifjweifja...
Name: "test plan name"
PlanDateYear: 2014
PlanDateMonth: 7
PlanDateDay: 4
我正在尝试构建一个mongoose查询,它将返回指定的开始日期和结束日期范围之间存在的所有计划记录。如果所有计划日期恰好在同一年,我有查询工作来获取开始和结束日期范围之间的计划,但是如果某些计划日期交叉到另一年,则mongoose查询逻辑会变得非常糟糕。在计划集合中包含字段的限制内是否有一些简洁的方法:PlanDateYear,PlanDateMonth和PlanDateDay?
非常感谢你的帮助!我现在已经坚持了一段时间:(
这是我当前的疑问:
Plan.find({
'user': req.user.id,
"$or" : [
{
'planDateMonth': startDateMonth,
"$and" : [
{ "planDateDay" : {$gte: startDateDay} }
,{'planDateMonth': {$ne: endDateMonth}}
//,{'planDateYear': {$gte: startDateYear}}
]
},
{
'planDateMonth': endDateMonth,
"$and" : [
{ "planDateDay" : {$lte: endDateDay} }
,{'planDateMonth': {$ne: startDateMonth}}
]
},
{
'planDateMonth': {$ne: endDateMonth},
"$and" : [
{'planDateMonth': {$ne: startDateMonth}},
{'planDateMonth': {$lte: endDateMonth, $gte: startDateMonth}},
{'planDateDay': {$lte: endDateDay, $gte: startDateDay}}
]
},
{
'planDateMonth': endDateMonth,
"$and" : [
{'planDateMonth': startDateMonth},
{'planDateDay': {$lte: endDateDay, $gte: startDateDay}}
]
}
]
}
)
.exec(function (err, plans) {
if (err) return next(err);
else {
//do stuff
}
答案 0 :(得分:0)
我会找到一种方法来处理Mongo日期,或者使用整数来表示日期(YYYYMMDD),因为简单的数学比较可以按预期工作。