我在代码下面写了。我试着分割日期和时间,但我无法得到正确的解决方案。我在Node JS中编写服务。如果我尝试在日期之间获取日期,它正在工作。但是,如果我试图获取确切的日期,它就无法正常工作。
use Net::SFTP::Foreign;
use warnings;
use strict;
my $stfp = Net::SFTP::Foreign->new (
'sftp.abc.com',
timeout => 240,
user => 'user1',
password => 'xxx',
port => '22',
autodie => 1,
);
my $remotefiles;
$remotefiles = $stfp->ls('/files');
foreach (@$remotefiles){
my $content;
my $file = $_;
my $filename = $file->{filename};
if($filename ne "." && $filename ne ".."){
$content = $stfp->get_content('/files/'.$filename);
print $content;
}
}
$stfp->disconnect;
exports.screenLog = function(req,res){
console.log(req.query);
Timesheet.find({userId: req.params.id,startTime: $match:{$gte : new Date(req.query.startTime),$lte: new Date(req.query.endTime)}}, function (err, timesheet) {
console.log(timesheet);
var timesheetIdArray = timesheet.map(function(ele){return ele._id});
Screenshot.find()
.where('timesheetId')
.in(timesheetIdArray)
.exec(function(err,data){
//console.log('ScreenData:',data);
if(err) {
res.send(err);
}
res.send(data);
});
});
答案 0 :(得分:1)
无法在MongoDB中拆分日期和时间。它们是数据库中的Store in Date对象。
但您可以按$gte,$lte,$eq
等比较日期
对于比较,您只能与UTC日期进行比较,为此您可以找到moment图书馆
例如:日期:{$ gte:moment(YOUR_DATE_IN_STRING)}
答案 1 :(得分:0)
我对Node.Js不太熟悉,但我认为项目聚合可以帮助你解决这个问题:
db.MyCollection.aggregate(
[
{
$project:
{
year: { $year: "$MyDateField" },
month: { $month: "$MyDateField" },
day: { $dayOfMonth: "$MyDateField" },
hour: { $hour: "$MyDateField" },
minutes: { $minute: "$MyDateField" },
seconds: { $second: "$MyDateField" },
milliseconds: { $millisecond: "$MyDateField" },
dayOfYear: { $dayOfYear: "$MyDateField" },
dayOfWeek: { $dayOfWeek: "$MyDateField" },
week: { $week: "$MyDateField" }
}
}
]
)
这将归还:
{
"_id" : "5897697667f26827dc9c9028",
"year" : 2017,
"month" : 2,
"day" : 5,
"hour" : 18,
"minutes" : 5,
"seconds" : 41,
"milliseconds" : 822,
"dayOfYear" : 36,
"dayOfWeek" : 1,
"week" : 6
}
这会让你更接近解决方案吗?