如何根据参考/模型填充字段?

Posted

技术标签:

【中文标题】如何根据参考/模型填充字段?【英文标题】: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,它应该只填充电子邮件。

【问题讨论】:

【参考方案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

以上是关于如何根据参考/模型填充字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中更改模型时填充数据库字段

如何使用 Firestore 填充参考字段

Flutter 中的自动填充文本字段

从 Django 中的文本字段填充管理表单

在 django 中填充字段(添加新的)

模型形式中的 django auto slug,例如 django admin 中的预填充字段