#node.js #mongodb #express
#node.js #mongodb #экспресс
Вопрос:
У меня есть этот фрагмент прямо здесь, который сохраняет пользователя в моем MongoDB:
router.post('/adduser', function(req, res) {
var db = req.db;
var document = req.body;
var codeResponse = code();
var timestamp = new Date();
document.code = codeResponse;
document.timestamp = timestamp;
db.collection('userlist').insert(document, function(err, result){
res.send(
(err === null) ? { msg: '',code: codeResponse } : { msg: err }
);
}); });
Как вы можете видеть, он также генерирует timestamp via the new Date();
функцию в JS.
Как можно получить пользователей по неделям?
Я попробовал это:
router.get('/winnerlist', function(req, res) {
var db = req.db;
var start = new Date(2014, 6, 14);
var end = new Date(2014, 6, 29);
db.collection('userlist').find({"timestamp": {"$gte": start, "$lt": end}}).toArray(function (err, items) {
res.json(items);
});
});
Ответ №1:
вы можете получить номер недели из объекта date, и после этого вы можете вставить номер недели в качестве нового свойства, я нашел этот полезный метод
Date.prototype.getWeek = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((((this - onejan) / 86400000) onejan.getDay() 1)/7);
}
var today = new Date();
var week = today.getWeek();
console.log(week); //which will return 26 as today
Ответ №2:
Я отвечаю на свой собственный вопрос.
Я сделал это при сохранении:
Я просто деформатирую даты и сохраняю их как простое число, например
Июнь-20-2014 становится 20140620
router.post('/adduser', function(req, res) {
var db = req.db;
var document = req.body;
var codeResponse = code();
var d = new Date();
var month = d.getMonth() 1;
var day = d.getDate();
var timestamp = d.getFullYear()
(month<10 ? '0' : '') month
(day<10 ? '0' : '') day;
document.code = codeResponse;
document.timestamp = timestamp;
db.collection('userlist').insert(document, function(err, result){
res.send(
(err === null) ? { msg: '',code: codeResponse } : { msg: err }
);
});
});
а затем я использую простые старые числа без какого-либо форматирования для определения дат:
router.get('/winnerlist', function(req, res) {
var db = req.db;
var start = "20140621";
var end = "20140623";
db.collection('userlist').find({"timestamp": {"$gte": start, "$lt": end}}).toArray(function (err, items) {
res.json(items);
});
});
Я НЕ буду отмечать это как принятое, возможно, это пока не лучшее решение.