【问题标题】:How to populate fields based on references/models?如何根据参考/模型填充字段?
【发布时间】:2020-11-08 01:33:49
【问题描述】:

我有两个用户模式:

UserSchema1 = new mongoose.Schema({
    firstName:{
        type: String
    }
})

UserSchema2 = new mongoose.Schema({
    email:{
        type: String
    }
})


ChatMessageSchema = new mongoose.Schema({
        senderId:{
            type: mongoose.Schema.Types.ObjectId,
            refPath: 'onModel',
            required: true
        },
        onModel:{
            type: String,
            required: true,
            enum: ['userSchema1', 'userSchema2']
        },
        message: {
            type: String,
            required: true
        }
})

现在,我需要填充所有聊天消息。我需要如下结果:

[
    {
        senderId:{
            firstName or email
        },
        onModel: userSchema1 / userSchema2,
        message: "message"
    },
    {

    }, ...
]

也就是说,如果发件人是 UserSchema1,那么它应该填充 firstName,如果它是 UserSchema2,它应该填充电子邮件。我无法填充所有字段,因为每个集合中有 20 多个字段。

简而言之,如果是 UserSchema1,它应该只填充 firstName,如果是 UserSchema2,它应该只填充电子邮件。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query mongoose-schema


    【解决方案1】:

    我猜您可以使用此架构进行聊天,它比您的架构更好 使用用户 ID 并通过 Id 获取用户数据

       MessageSchema = new mongoose.Schema({
          from: {
            type: string,
            required: true,
          },
          to: {
            type: string,
            required: true,
          },
          time: {
            type: Date,
            default: Date.now(),
          },
          message: {
            type: string,
            required: true,
          },
        });
    
    
    ChatSchema = new mongoose.Schema({
            firstUserId:{
                type: mongoose.Schema.Types.ObjectId,
                required: true,
            },
            secondUserId:{
                type: mongoose.Schema.Types.ObjectId,
                required: true,
            },
            Chat: MessageSchema,
    })
    

    数据会这样

    [
      {
        firstUserId: "hjakdsf323275lks",
        secondUserId: "asdfe2342232aas",
        Chat: [
          {
            from: "hjakdsf323275lks",
            to: "asdfe2342232aas",
            time: "18/7/2020 20:06:09",
            message: "Hi ",
          },
          {
            from: "asdfe2342232aas",
            to: "hjakdsf323275lks",
            time: "18/7/2020 21:07:09",
            message: "hello ",
          },....
        ],
      },
    ];
    

    【讨论】:

    • 我提到的架构只是实际架构的一部分。该应用程序已经开发,我需要解决这个问题。有什么办法,我可以在不更改架构的情况下解决这个问题? PS:任何帮助将不胜感激。
    • 没问题,只要你能给我完整的架构来修复它
    • 我想共享完整的架构会让事情变得更加混乱。我共享的架构涵盖了所有必需的细节。告诉我你到底需要什么?
    • 因为我不了解你的架构,所以我现在想知道所有架构中的流程
    • 如果你想联系我这个我的 Github 帐户github.com/ha77an
    猜你喜欢
    • 2018-08-20
    • 2021-04-19
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多