代码之家  ›  专栏  ›  技术社区  ›  raju

使用mongoose保存数据的交叉表查询或虚拟

  •  0
  • raju  · 技术社区  · 3 年前

    我有一个json对象,我想保存在mongodb中,

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

    必须将其拆分为两个表:时间表主表和时间表数据

    主时间表。模型如下:

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

    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 ,在它成功之后,我呼吁再次插入 时间表数据。模型 ,并将数据保存在此。但有人建议,有更好的方法可以使用虚拟现实来实现这一点。我试过了,但没有成功。

    非常感谢您的帮助/建议。

    谢谢

    0 回复  |  直到 3 年前
        1
  •  2
  •   Karan Gaur    3 年前

    您希望在mongo实现一对多关系。你可以继续 this 链接

    至于模型:

    主时间表。模型 [家长]

    {
        "data": [{ type: Schema.Types.ObjectId, ref: 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)