MongoDb聚合条件组和推送记录

Sys*_*ech 5 javascript mongodb node.js mongodb-query aggregation-framework

我正在尝试运行一个条件组并进行推送。我不知道\xe2\x80\x99t 是否可以使用 MongoDb 聚合或 NodeJs。

\n

我有出勤收集和轮班收集,如下所示。还为我当前的尝试创建了 Playground Mongo Playground

\n

Attendances

\n
[\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  ]\n
Run Code Online (Sandbox Code Playgroud)\n

Shifts

\n
[\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  ]\n
Run Code Online (Sandbox Code Playgroud)\n

我的要求是,如果isNight === true然后将下一个考勤记录推到上一个日期。

\n

我所需的 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]\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何使用 MongoDb 或 NodeJs?

\n

ric*_*cxk 0

它为我解决了问题。

数据库.json

这是您的示例数据。
[
    {
        "_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)

脚本.js

要进行更改的node.js 脚本。
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)

1 控制台输出

改变之前。

[
  {
    _id: '626965ee9a6fe1422b61d4b2',
    date: '2022-04-30',
    employee: '622062023b2eaac4b15d42e6',
    isNight: true,
    name: 'Night'
  }
]
Run Code Online (Sandbox Code Playgroud)

2 控制台输出

改变后。

[
  {
    _id: '626965ee9a6fe1422b61d4b2',
    date: '2022-05-01',
    employee: '622062023b2eaac4b15d42e6',
    isNight: true,
    name: 'Night'
  }
]
Run Code Online (Sandbox Code Playgroud)