我很难从MongoDB显示我的记录。基本上我有一些字段' leaves_start'和' leaves_end'在我的MongoDB中。此字段包含用户休假的日期范围。见下面的例子。
user_name:junel
leaves_start:2015年5月10日
leaves_end:10/10/2015
如果当前日期(例如2015年7月10日)在记录的leaves_start和leaves_end范围内,我想获取MongoDB中的所有记录。
我已经尝试了$ gte和$ lte,但我对如何在当前状态下实现它感到有些困惑。
这是我的示例方法:
getTowerLeaveData_LV: function(dateToday,tower) {
var arr = LeavesCollection.find($or: [
{ leaves_start: { $lte: dateToday } },
{ leaves_end: { $gte: dateToday } } ],
leaves_approval_status: {$ne: 'Rejected'}}).fetch();
return arr
},
这是我的样本Mongodb记录
_____________________________________
name | leaves_start | leaves_end
_____________________________________
Junel | 10/01/2015 | 10/03/2015
_____________________________________
Jaycee | 10/03/2015 | 10/03/2015
_____________________________________
Tori | 10/05/2015 | 10/10/2015
_____________________________________
Ryan | 10/02/2015 | 10/05/2015
如果dateToday的值是10/03/2015,那么方法应该返回Junel,Jaycee和Ryan的记录。
我希望这是有道理的。多谢你们!
答案 0 :(得分:1)
你这样做
MyCollection.find({
leaves_start: { $lte: new Date },
leaves_end: { $gte: new Date }
});
答案 1 :(得分:1)
startDate = ;// get Start Date from UI Convert it to date format using new Date();
endDate = ;// get End Date from UI Convert it to date format using new Date();
MyCollection.find({
leaves_start: { $lte: endDate}, // start Less and endDate
leaves_end: { $gte: startDate } // end greater than StartDate
});
如果startDate和endDate相同,则获得该日期的所有记录,否则它将是日期范围。
答案 2 :(得分:0)
我不确定这是否有用,但这是我提出的代码:
方法:
//monthyear = "10-2015"
//numOfDays = 31
getTowerLeaveData_LV: function(monthyear, numOfDays,tower, userid, username) {
var selectedMonthYear = monthyear.split("-");
var tempArr = new Array();
var reArr = new Array()
tempArr.push(username)
reArr.push(username);
LeavesCollection.find({associate_tower: {$in: tower}, leaves_approval_status: {$ne: 'Rejected'}, user_id: userid},{sort:{leaves_timestamp :-1}},{fields: {_id:1,user_id:1,associate_id:1, associate_fullname:1,leaves_type:1,leaves_start:1,leaves_end:1, leaves_days:1}}).forEach(
function(leaver) {
for(var a=1; a!=numOfDays+1; a++) {
var dateActive = selectedMonthYear[0] + "/" + a.toString() + "/" + selectedMonthYear[1];
var res = dateCheck(leaver.leaves_start, leaver.leaves_end,dateActive);
if(res == true) {
tempArr.splice(a, 0,[leaver.leaves_approval_status,leaver.leaves_type,leaver._id,leaver.associate_fullname,a]);
}
}
});
for(var a=1; a!=numOfDays+1; a++) {
var temp = findKey(tempArr,a);
if(temp != false) {
reArr.push(tempArr[temp]);
} else {
reArr.push('null')
}
}
return reArr;
},
MISC JS功能:
function dateCheck(from,to,check) {
var fDate,lDate,cDate;
fDate = Date.parse(from);
lDate = Date.parse(to);
cDate = Date.parse(check);
if((cDate <= lDate && cDate >= fDate)) {
return true;
}
return false;
}
function findKey(array, search) {
var theIndex = false;
for (var i = 0; i < array.length; i++) {
if (array[i].indexOf(search) > -1) {
theIndex = i;
break;
}
}
return(theIndex);
}
输出说明:
数组中Name后面的项目等于numOfDays(是日期)的值。如果程序找到“leaves_start”和“leaves_end”之间的匹配日期,它将从mongodb返回数组数据,否则返回“null”。