我对 MongoDB 还很陌生,在准备要使用的数据时,我进入了聚合……这个数据库有多么强大的小东西!我非常兴奋并开始测试一些东西:)
我正在为 companyId 和 employeeId 保存时间条目......可以有很多条目......那些通常按日期排序,但一个日期可以有多个条目(同一天多次注册)
我正在尝试提出一个好的模式,这样我就可以轻松地根据我的需要获取我的数据,作为一个新手,我宁愿寻求指导并检查我是否走在正确的道路上
我的输出应该是
[{
"company": "474A5D39-C87F-440C-BE99-D441371BF88C",
"employee": "BA75621E-5D46-4487-8C9F-C0CE0B2A7DE2",
"name": "Bruno Alexandre":
"registrations": [{
"id": 1448364,
"spanned": false,
"spannedDay": 0,
"date": "2019-01-17",
"timeStart": "09:00:00",
"timeEnd": "12:00:00",
"amount": {
"days": 0.4,
"hours": 2,
"km": null,
"unit": "days and hours",
"normHours": 5
},
"dateDetails": {
"week": 3,
"weekDay": 4,
"weekDayEnglish": "Thursday",
"holiday": false
},
"jobCode": {
"id": null,
"isPayroll": true,
"isFlex": false
},
"payroll": {
"guid": null
},
"type": "Sick",
"subType": "Sick",
"status": "APP",
"reason": "IS",
"group": "LeaveAndAbsence",
"note": null,
"createdTimeStamp": "2019-01-17T15:53:55.423Z"
}, /* more date entries */ ]
}, /* other employees */ ]
将数据添加到集合中的最佳方法是什么?
它是更有效的,如果我创建一个文档每家公司/员工,并补充说,文件中的所有注册项(随着时间的推移它可以得到非常大的)...或者是它最好有一个文件每家公司/员工/日期和附加而是该文档中的所有日常事件?
关于聚合,我对这一切还是陌生的,但我想我可以简单地打电话
RegistrationsModel.aggregate([
{
$match: {
date: { $gte: new Date('2019-01-01'), $lte: new Date('2019-01-31') },
company: '474A5D39-C87F-440C-BE99-D441371BF88C'
}
},
{
$group: {
_id: '$employee',
name: { '$first': '$name' }
}
},
{
// ... get all registrations as an Array ...
},
{
$sort: {
'registrations.date': -1
}
}
]);
PS 我参加了聚合课程以开始熟悉所有内容
如果我为每个公司/员工创建一个文档并在该文档中添加所有注册条目(随着时间的推移它可能会变得非常大),是否会更有效......或者每个公司/员工/日期有一个文档并添加更好而是该文档中的所有日常事件?
根据我对面向文档的数据库的理解,我想说的目的是将您需要的所有数据在特定上下文中分组到一个文档中。因此,您需要做的是确定您将需要哪些数据(接近您想要实现的功能)并根据该数据构建您的数据结构。请务必确定未来的功能,因为您为它准备的数据结构越多,根据您的需要扩展数据库的难度就越小。
您的聚合查询看起来不错!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句