Sys*_*ech 5 javascript mongodb node.js mongodb-query aggregation-framework
我正在尝试运行一个条件组并进行推送。我不知道\xe2\x80\x99t 是否可以使用 MongoDb 聚合或 NodeJs。
\n我有出勤收集和轮班收集,如下所示。还为我当前的尝试创建了 Playground Mongo Playground。
\nAttendances
[\n {\n "_id": "62206c873b2eaac4b15d42f9",\n "employee": "6220624b3b2eaac4b15d42e8",\n "createdAt": "2022-04-28T04:11:13.036Z"\n },\n {\n "_id": "62206b173b2eaac4b15d42f1",\n "employee": "6220624b3b2eaac4b15d42e8",\n "createdAt": "2022-04-28T04:22:04.573Z"\n },\n {\n "_id": "626cb9329a6fe1422b61d4e4",\n "employee": "622062023b2eaac4b15d42e6",\n "createdAt": "2022-04-30T04:21:06.965Z"\n },\n {\n "_id": "626e19409a6fe1422b61d4f5",\n "employee": "622062023b2eaac4b15d42e6",\n "createdAt": "2022-05-01T05:23:12.342Z"\n },\n {\n "_id": "626cb9329a6fe1422b61d4e6",\n "employee": "622062023b2eaac4b15d42e6",\n "createdAt": "2022-05-01T15:42:39.827Z"\n },\n {\n "_id": "626cb9329a6fe1422b61d4e5",\n "employee": "622062023b2eaac4b15d42e6",\n "createdAt": "2022-05-02T09:46:51.439Z"\n }\n ]\nRun Code Online (Sandbox Code Playgroud)\nShifts
[\n {\n "_id": "626965ee9a6fe1422b61d4b1",\n "employee": "6220624b3b2eaac4b15d42e8",\n "date": "2022-04-28",\n "name": "Day",\n "isNight": false\n },\n {\n "_id": "626965ee9a6fe1422b61d4b2",\n "employee": "622062023b2eaac4b15d42e6",\n "date": "2022-04-30",\n "name": "Night",\n "isNight": true\n },\n {\n "_id": "626965ee9a6fe1422b61d4b3",\n "employee": "622062023b2eaac4b15d42e6",\n "date": "2022-05-01",\n "name": "Night",\n "isNight": true\n }\n ]\nRun Code Online (Sandbox Code Playgroud)\n我的要求是,如果isNight === true然后将下一个考勤记录推到上一个日期。
我所需的 JSON 应该如下所示。
\n[\n {\n "_id": {\n "createdAt": "2022-04-28",\n "employee": "6220624b3b2eaac4b15d42e8"\n },\n "attendances": [\n {\n "_id": "62206c873b2eaac4b15d42f9",\n "createdAt": "2022-04-28T04:11:13.036Z",\n "employee": "6220624b3b2eaac4b15d42e8"\n },\n {\n "_id": "62206b173b2eaac4b15d42f1",\n "createdAt": "2022-04-28T04:22:04.573Z",\n "employee": "6220624b3b2eaac4b15d42e8"\n }\n ],\n "shifts": [\n {\n "_id": "626965ee9a6fe1422b61d4b1",\n "date": "2022-04-28",\n "employee": "6220624b3b2eaac4b15d42e8",\n "isNight": false,\n "name": "Day"\n }\n ]\n },\n {\n "_id": {\n "createdAt": "2022-04-30",\n "employee": "622062023b2eaac4b15d42e6"\n },\n "attendances": [\n {\n "_id": "626cb9329a6fe1422b61d4e4",\n "createdAt": "2022-04-30T04:21:06.965Z",\n "employee": "622062023b2eaac4b15d42e6"\n },\n {\n "_id": "626e19409a6fe1422b61d4f5",\n "createdAt": "2022-05-01T05:23:12.342Z",\n "employee": "622062023b2eaac4b15d42e6"\n }\n ],\n "shifts": [\n {\n "_id": "626965ee9a6fe1422b61d4b2",\n "date": "2022-04-30",\n "employee": "622062023b2eaac4b15d42e6",\n "isNight": true,\n "name": "Night"\n }\n ]\n },\n {\n "_id": {\n "createdAt": "2022-05-01",\n "employee": "622062023b2eaac4b15d42e6"\n },\n "attendances": [\n {\n "_id": "626cb9329a6fe1422b61d4e6",\n "createdAt": "2022-05-01T15:42:39.827Z",\n "employee": "622062023b2eaac4b15d42e6"\n },\n {\n "_id": "626cb9329a6fe1422b61d4e5",\n "createdAt": "2022-05-02T09:46:51.439Z",\n "employee": "622062023b2eaac4b15d42e6"\n }\n ],\n "shifts": [\n {\n "_id": "626965ee9a6fe1422b61d4b2",\n "date": "2022-04-30",\n "employee": "622062023b2eaac4b15d42e6",\n "isNight": true,\n "name": "Night"\n }\n ]\n }\n]\nRun Code Online (Sandbox Code Playgroud)\n我该如何使用 MongoDb 或 NodeJs?
\n它为我解决了问题。
[
{
"_id": {
"createdAt": "2022-04-28",
"employee": "6220624b3b2eaac4b15d42e8"
},
"attendances": [
{
"_id": "62206c873b2eaac4b15d42f9",
"createdAt": "2022-04-28T04:11:13.036Z",
"employee": "6220624b3b2eaac4b15d42e8"
},
{
"_id": "62206b173b2eaac4b15d42f1",
"createdAt": "2022-04-28T04:22:04.573Z",
"employee": "6220624b3b2eaac4b15d42e8"
}
],
"shifts": [
{
"_id": "626965ee9a6fe1422b61d4b1",
"date": "2022-04-28",
"employee": "6220624b3b2eaac4b15d42e8",
"isNight": false,
"name": "Day"
}
]
},
{
"_id": {
"createdAt": "2022-04-30",
"employee": "622062023b2eaac4b15d42e6"
},
"attendances": [
{
"_id": "626cb9329a6fe1422b61d4e4",
"createdAt": "2022-04-30T04:21:06.965Z",
"employee": "622062023b2eaac4b15d42e6"
},
{
"_id": "626e19409a6fe1422b61d4f5",
"createdAt": "2022-05-01T05:23:12.342Z",
"employee": "622062023b2eaac4b15d42e6"
}
],
"shifts": [
{
"_id": "626965ee9a6fe1422b61d4b2",
"date": "2022-04-30",
"employee": "622062023b2eaac4b15d42e6",
"isNight": true,
"name": "Night"
}
]
},
{
"_id": {
"createdAt": "2022-05-01",
"employee": "622062023b2eaac4b15d42e6"
},
"attendances": [
{
"_id": "626cb9329a6fe1422b61d4e6",
"createdAt": "2022-05-01T15:42:39.827Z",
"employee": "622062023b2eaac4b15d42e6"
},
{
"_id": "626cb9329a6fe1422b61d4e5",
"createdAt": "2022-05-02T09:46:51.439Z",
"employee": "622062023b2eaac4b15d42e6"
}
],
"shifts": [
{
"_id": "626965ee9a6fe1422b61d4b2",
"date": "2022-04-30",
"employee": "622062023b2eaac4b15d42e6",
"isNight": true,
"name": "Night"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
let yourData = require('./DB.json')
// 1 Console output
console.log(yourData[1].shifts);
for (let index in yourData) {
if (yourData[index].shifts[0].isNight) {
yourData[index].shifts[0].date = yourData[index].attendances[1].createdAt.split("T")[0];
}
}
// 2 Console output
console.log(yourData[1].shifts);
Run Code Online (Sandbox Code Playgroud)
改变之前。
[
{
_id: '626965ee9a6fe1422b61d4b2',
date: '2022-04-30',
employee: '622062023b2eaac4b15d42e6',
isNight: true,
name: 'Night'
}
]
Run Code Online (Sandbox Code Playgroud)
改变后。
[
{
_id: '626965ee9a6fe1422b61d4b2',
date: '2022-05-01',
employee: '622062023b2eaac4b15d42e6',
isNight: true,
name: 'Night'
}
]
Run Code Online (Sandbox Code Playgroud)