[英]get today's imported data from mongodb using timestamp node js
我按当前时间戳将报告添加到 MongoDB 数据库中,但我无法检索今天导入的数据,因为当前时间戳与插入数据的时间戳值不同。 如何使用时间戳查看数据?
添加报告
reportsController.addReports = function (req, resp) {
let battriesObjs = [];
let banksObjs = [];
let reports = req.body;
// console.log(batteries);
const siteReports = new SiteReports({
siteId: reports.siteId,
environmentParam1: reports.envp1,
environmentParam2: reports.envp2,
environmentParam3: reports.envp3,
reportDate: moment().valueOf()
});
let btr = reports['battries'];
btr.forEach(function (btry) {
const batteryReports = new BatteryReports({
batteryId: btry.bid,
batteryStatus: btry.status,
batteryVoltage: btry.voltage,
batteryTemperature: btry.temperature,
reportDate: moment().valueOf()
});
battriesObjs.push(batteryReports);
});
siteReports
.save()
.then(value => {
console.log("insert sampleCollection result ", value);
BatteryReports
.insertMany(battriesObjs)
.then(valueBatteries =>
resp.status(status.OK)
.json({'respond': 'the document is updated successfully'}))
.catch(err => {
console.log("bulk insert sampleCollection error ", err);
});
})
.catch(err => {
console.log("bulk insert sampleCollection error ", err);
});
};
得到回报
reportsController.getAllTodayBatteryReports = function (req, resp) {
console.log(req.query.batteryBankId, moment().valueOf());
BatteryReports.aggregate([
{
$match: {
"reportDate": moment().valueOf().toString()
}
}
,
{
$lookup:
{
from: "batteryschemas",
localField: "batteryId",
foreignField: "batteryId",
as: "batteryReports_with_their_info"
}
}
,
{
$match:
{"batteryReports_with_their_info.batteryBankId": new mongoose.Types.ObjectId(req.query.batteryBankId)}
}
,
{
$replaceRoot: {newRoot: {$mergeObjects: [{$arrayElemAt: ["$batteryReports_with_their_info", 0]}, "$$ROOT"]}}
}
,
{
$project: {
batteryReports_with_their_info: 0,
batteryBrand: 0,
batteryMaximumChargingCurrent: 0,
batteryCycleOfCharge: 0,
batteryModel: 0,
batteryProductDate: 0,
batteryInternalResistance: 0,
batteryCapacity: 0,
__v: 0
}
}
], function (err, result) {
console.log(result);
if (err) {
resp.status(status.NOT_FOUND).json({'respond': err + ''});
} else {
resp.status(status.OK).json(result);
}
// console.log(result);
});
};
如您所见,我的这部分代码获取当前时间戳并将其放入 MongoDB 匹配方法,但尽管在今天的时间戳中添加了一些数据,但我无法通过当前时间戳值获取这些记录。
$match: {
"reportDate": moment().valueOf().toString()
}
样品
{
"_id": "5d3c9116ee51fe32b44160f6",
"batteryId": "1",
"batteryVoltage": "5.5",
"batteryVoltageMin": "34",
"batteryVoltageMax": "34",
"batteryMinTemperature": "443",
"batteryMaxTemperature": "43",
"batteryBankId": "5d29c1469e0e8b3afcf3a1e6",
"batteryStatus": "H",
"batteryTemperature": "38",
"reportDate": "1564250390757"
}
您可以将moment().valueOf()
值分配给对象并将其用于 reportDate。 加上moment().valueOf()
将以毫秒为单位为您提供时间戳,然后插入的时间将与查询时间不同,因此您需要进行范围查询以获得特定的记录/文档,或者传递精确的时间戳以获得精确匹配。
假设您今天插入了几个文档,并希望在同一天在给定的时间戳运行您的查询(请注意时间戳属于同一区域)然后,
let currentTimeStamp = moment().valueOf().toString()
let startOfDayTimeStamp = moment().startOf('day').valueOf().toString()
然后,
$match: {
"reportDate": { $gt: startOfDayTimeStamp, $lt: currentTimeStamp }
}
如果您正在处理频繁写入的集合,那么您正在处理像这样的读取查询的大量数据,请记住进行适当的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.