моя схема
Customers.js
import mongoose from 'mongoose';
const Customers = mongoose.Schema({
CustomerID: { type: String, default: "" },
Name: { type: String, default: "" },
Email: { type: String, default: "" },
PhoneNumber: { type: String, default: "" },
Join_Date: { type: Date, default: null }
}, { collection: 'Customers' });
export default mongoose.model('Customers', Customers);
мой контроллер маршрутизатора
import Customers from "./Customers";
router.post('/List_All_Customers', (req, res) => {
Customers.find().lean().exec().then((Data) => {
res.json({Data: Data});
}).catch((err) => {
console.log(err);
});
})
Мой текущий результат
{
Data: [
{
CustomerID: "6ad050d4-04ac-41f2-8c93-49f68f106889",
Name: "Uday Kumar",
Email: "[email protected]",
PhoneNumber: "+91-991010191",
Join_Date: "2018-04-24T12:00:00.000Z"
},
{
CustomerID: "792b67f9-9026-43bc-9017-46cd2568b4e9",
Name: "Prem Kumar",
Email: "[email protected]",
PhoneNumber: "+91-881010091",
Join_Date: "2018-04-24T15:00:00.000Z"
}
]
}
Ожидание результата
{
Data: [
{
CustomerID: "6ad050d4-04ac-41f2-8c93-49f68f106889",
Name: "Uday Kumar",
Email: "[email protected]",
PhoneNumber: "+91-991010191",
Join_Date: "Apr-24 2018, 12:00:00"
},
{
CustomerID: "792b67f9-9026-43bc-9017-46cd2568b4e9",
Name: "Prem Kumar",
Email: "[email protected]",
PhoneNumber: "+91-881010091",
Join_Date: "Apr-24 2018, 15:00:00"
}
]
}
Есть в любом случае в mongodb для получения пользовательских дат. Я использую соединение mongoose mongodb в своем проекте.
Я могу манипулировать данными, используя for loop with momentjs, но это занимает время.
Поэтому мне нужно решение для моего вопроса.
Заранее спасибо.
Комментарии приветствуются.
Вы можете использовать функцию отображения javascript, например
import Customers from "./Customers";
router.post('/List_All_Customers', (req, res) => {
Customers.find().lean().exec().then((Data) => {
Promise.resolve(arr.map(item=>{
item.Join_Date = fnToConvertDateToYourFormate(item.Join_Date);
return item;
})).then(Data=>{
res.json({Data: Data});
});
}).catch((err) => {
console.log(err);
});
})
ИЛИ Вы можете использовать Mongoose MapReduce http://mongoosejs.com/docs/api.html#mapreduce_mapReduce
var o = {};
o.map = function () {
this.Join_Date = fnToConvertDateToYourFormate(this.Join_Date);
emit(this.CustomerId,this)
}
o.reduce = function (k, vals) { }
mongoose.model('Customers').mapReduce(o, function (err, results) {
console.log(results)
});
Вы можете использовать агрегированный запрос. Пример этого запроса приведен ниже:
db.customers.aggregate([
{$project:
{yearMonthDayUTC:
{$dateToString:
{format: "%Y-%m-%d",
date: "$date"
}
},
}
}
])
Для этого запроса дата должна быть в ISO. Поэтому, вставляя элемент в db, вы можете использовать new Date()
поскольку это возвращает текущую дату как объект Date. Оболочка mongo обертывает объект Date с помощью помощника ISODate.
Пример вставки данных в db приведен ниже:
db.sales.insert({ "_id" : 4, "item" : "mansi", "price" : 10, "quantity" : 2, "date" : new Date(Date.now()) })
Вы можете попробовать агрегирование mongoDB $dateToString
.
Customers.aggregate([
{
$project: {
"other_field": 1, // and so on as many fields you need
Join_Date: {
{ $dateToString: { format: "%Y-%m-%d", date: "$Join_Date" } }
}
}
}
]).then((Data) => {
res.json({Data: Data});
}).catch((err) => {
console.log(err);
});
Узнайте больше об этом: https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/
$dateToString
, но форматы вывода ограничены. Вы действительно "не должны" изменить этот вывод, хотя. Это данные, отправляемые клиенту, а формат ISO - это то, что этот клиент действительно должен получать. Если «клиент» хочет отобразить в другом формате, то он должен сделать это сам, где он может специально отформатировать его «локаль». Даты не одинаковы в каждой стране.