【问题标题】:crosstab-query or virtuals to save data using mongoose交叉表查询或虚拟使用猫鼬保存数据
【发布时间】:2021-08-17 05:15:00
【问题描述】:

我有一个我喜欢保存在 mongodb 中的 json 对象,

{
    "user": "abc",
    "week": 21,
    "year": 2021
    "data": [
        {
            "date": "01/01/21",
            "present": true
        },
        {
            "date": "02/01/21",
            "present": false
        }
    ]
}

这必须分成 2 个表:timesheet-main 和 timesheet-data

timesheet-main.model 会是这样的:

{
    "user": "abc",
    "week": 21,
    "year": 2021,
    data: {
        ref: timesheet-data.model
    }
}

AND timesheet-data.model 会是这样的:

{
    {
        user: userIdFrom-timesheet-main.model,
        timesheet-main-id: timesheet-main-ref-from-above-collection,
        "date": "02/01/21",
        "present": false
    }
}

所以当我想要按周进行用户查询时,我会得到这样的结果:

{
    "_id": "asf5sf44sdw3sfsf",
    "user": "abc",
    "week": 21,
    "year": 2021
    "data": [
        {
            "_id": "Asdfsdfsdfsdfsdfsf",
            "date": "01/01/21",
            "present": true
        },
        {
            "_id": "egdfgfhfghfghfgh"
            "date": "02/01/21",
            "present": false
        }
    ]
}

我不知道有什么好的或简单的方法可以做到这一点,所以在将数据保存在timesheet-main.model 中时,在它成功之后,我调用另一个插入到timesheet-data.model 中,并在其中保存数据。但是有人建议使用 Virtuals 可以有更好的方法来做到这一点。我试过了,但没有成功。

非常感谢任何帮助/建议。

谢谢

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您希望在 mongo 中实现一对多关系。您可以关注this 链接。

    至于型号:

    timesheet-main.model [父级]

    {
        "data": [{ type: Schema.Types.ObjectId, ref: timesheet-data.model }]
    }
    

    timesheet-data.model [子级]

    {
        "timesheet-main-id": { type: Schema.Types.ObjectId, ref: timesheet-main.model },
    }
    

    根据选择考虑其他字段。我只是为一对多关系添加字段。

    用于添加数据 -

    const parent = new TimesheetMain({
        _id: new mongoose.Types.ObjectId(),
        data: []
    })
    const child  = new TimesheetData()
    child.timesheet-main-id = parent._id
    child.save(err => HandlerErr)
    parent.data.push(child)
    parent.save(err=> HandlerErr)
    

    【讨论】:

    • 答案几乎可以,但我没有保留,父母参考孩子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2021-01-09
    • 2016-05-05
    • 2017-11-01
    • 1970-01-01
    • 2013-09-13
    相关资源
    最近更新 更多