如何使用外键请求在 MongoDB 中获取填充字段?

我有shema:

const MessageSchema = new Schema(
  {
    parent: { type: Schema.Types.ObjectId,ref: 'Message',default: null },message: { type: String,default: '' },reply: { type: Schema.Types.ObjectId,}
);

我需要通过消息和对消息的评论进行某种简单的聊天。我猜评论和消息实际上是相同的模式。因此,如果我创建消息,而不是对任何消息的评论,我只需使用父级“null”创建它。但是,如果我对消息创建评论,我会创建带有父级的文档,ID 为我刚刚评论的消息。 所以我想得到一些消息的所有评论我只是像这样做 mongo 请求

find({parent: <messageId>})

例如我有收藏:

   {
      _id: "ertgewrhyer436346rteyre"
      parent: null,message: 'I know the secret',reply: null
   },{
       _id: "dsgerwerg4w5jyjrt",parent: "ertgewrhyer436346rteyre"
       message: 'Ok',reply: null
    },{
       _id: "jmymesfhbuyt",parent: "ertgewrhyer436346rteyre"
       message: 'I need  to know too',reply: null
     },{
       _id: "5y46jyewrherhre",parent: "ertgewrhyer436346rteyre"
       message: 'Yes yes yes',reply: null
     }
  

但我不知道如何让 mongo 请求返回这个:

{
    _id: "ertgewrhyer436346rteyre"
    parent: null,reply: [
     {
       parent: "ertgewrhyer436346rteyre",message: 'Ok',{
       parent: "ertgewrhyer436346rteyre",message: 'I need  to know too',message: 'Yes yes yes',reply: null
     }
    ],}

我知道我将字段回复设为带有 ref: 'Message' 的数组,但我认为这不是一个好主意,因为可能会有很多评论,而 mongo 也有其局限性。

cc4400092 回答:如何使用外键请求在 MongoDB 中获取填充字段?

我认为除了设置 parent 的默认值并回复 null 之外,您走在正确的轨道上,因为 mongoose populate 方法在找到具有 null 值的字段时会抛出错误。要么该字段不应该存在,如果存在,它应该是 ObjectId 类型。

现在,为了填充您的数据,您只需执行以下操作:

const result = await Model.find({}).populate('reply')

如果你想填充多个字段,传递一个字符串数组,你会很好

本文链接:https://www.f2er.com/2596.html

大家都在问