Javascript 如何使用自定义日期格式的find()方法从集合中检索数据
我的模式 Customers.jsJavascript 如何使用自定义日期格式的find()方法从集合中检索数据,javascript,node.js,mongodb,mongoose,momentjs,Javascript,Node.js,Mongodb,Mongoose,Momentjs,我的模式 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,
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: "uday@blaabla.com",
PhoneNumber: "+91-991010191",
Join_Date: "2018-04-24T12:00:00.000Z"
},
{
CustomerID: "792b67f9-9026-43bc-9017-46cd2568b4e9",
Name: "Prem Kumar",
Email: "prem@blaabla.com",
PhoneNumber: "+91-881010091",
Join_Date: "2018-04-24T15:00:00.000Z"
}
]
}
预期结果
{
Data: [
{
CustomerID: "6ad050d4-04ac-41f2-8c93-49f68f106889",
Name: "Uday Kumar",
Email: "uday@blaabla.com",
PhoneNumber: "+91-991010191",
Join_Date: "Apr-24 2018, 12:00:00"
},
{
CustomerID: "792b67f9-9026-43bc-9017-46cd2568b4e9",
Name: "Prem Kumar",
Email: "prem@blaabla.com",
PhoneNumber: "+91-881010091",
Join_Date: "Apr-24 2018, 15:00:00"
}
]
}
mongodb中是否有自定义日期的结果。我在我的项目中使用mongoose mongodb连接
我可以通过momentjs使用for循环操作数据,但这需要时间
所以我的问题需要一个解决方案
提前谢谢
欢迎评论。您可以使用javascript映射功能 喜欢 或 您可以使用Mongoose MapReduce
您可以尝试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);
});
更多信息,请访问:
您可以使用聚合查询。下面给出了此查询的示例:-
db.customers.aggregate([
{$project:
{yearMonthDayUTC:
{$dateToString:
{format: "%Y-%m-%d",
date: "$date"
}
},
}
}
])
对于此查询,日期应为ISO格式。因此,在将元素插入数据库时,您可以使用newdate()
,因为这会将当前日期作为日期对象返回。mongo shell使用ISODate辅助对象包装日期对象
下面给出了在数据库中插入数据的示例:-
db.sales.insert({ "_id" : 4, "item" : "mansi", "price" : 10, "quantity" : 2, "date" : new Date(Date.now()) })
“我可以通过momentjs使用for循环来操作数据,但这需要时间。”事实上,这是你最好的选择,“如果你真的改变了事情”,也就是说。现代MongoDB版本有一个
$dateToString
,但输出格式有限。不过,您确实“不应该”更改此输出。这是发送给客户机的数据,ISO格式是客户机真正应该接收的格式。如果“客户机”希望以不同的格式显示,那么它应该自己这样做,因为它可以专门为其“区域设置”设置格式。每个国家/地区的日期都不相同。因此,mongodb除了有限的$dateToStringmapReduce可以在服务器上执行JavaScript操作之外,没有其他可行的解决方案,但响应是单个BSON文档,通常不实用。我的主要观点是“不要这样做”。日期的输出与预期完全一致。相反,在客户端处理不同的格式是更好的方法。否则,只需在继续之前修改返回的文档即可。感谢@NeilLunn的期待和建议我知道如何使用map、async和forEach等操作json数组。我只想知道mongodbOkay是否有任何解决方案。。所以使用mongoose mapReduce格式是有限的,我需要在find方法中使用它,并且我必须独立处理其他文件fields@RatanUdayKumar是的,格式有点限制,是的,您需要定义其他字段。另一种方法是使用mongoose中间件,但它同样涉及循环。我正在寻找一种方法,将$dateToString和$month一起使用,以生成所需的格式。
db.customers.aggregate([
{$project:
{yearMonthDayUTC:
{$dateToString:
{format: "%Y-%m-%d",
date: "$date"
}
},
}
}
])
db.sales.insert({ "_id" : 4, "item" : "mansi", "price" : 10, "quantity" : 2, "date" : new Date(Date.now()) })