如何在另一个模型中使用猫鼬模型?

时间:2020-05-08 20:39:51

标签: javascript node.js express mongoose model

我有以下两种型号。在用户模型中,我想使用一个请求数组,在请求模型中,我想使用User作为属性(没有密码)。我该怎么办?

var userSchema = new Schema({
  cartaoCidadao: {
    type: String,
    required: true,
    index: {
      unique: true,
    },
    match: /[0-9]{8}/,
  },
  password: { type: String, required: true },
  role: { type: String },

  estado: { type: String, enum: ["Infetado", "Suspeito"] },
});

var requestSchema = new Schema({
  encaminhado: { type: String },
  pessoaRisco: { type: String },
  trabalhoRisco: { type: String },
  estadoPedido: { type: String },
  resultado: { type: String },
});

3 个答案:

答案 0 :(得分:1)

您可以使用定义为类型本身的模式:

var userSchema = new Schema({
    // ...
    requests: {
        type: [requestSchema] // this property type is: array of requests
    }
    // ...
});

如果两个模型都存储在数据库中,并且您可能想关联它们。您可以从另一个模型中引用一个模型。 (请参见穆罕默德·莱因的答案)

然后,您查询父模型并将子模型与其关联(https://mongoosejs.com/docs/populate.html

下面是一个如何在填充期间排除某些字段的示例: https://mongoosejs.com/docs/populate.html#query-conditions

它将是这样的:

User.
  find(/* some query */).
  populate({
    path: 'requests',
    select: 'fieldToSelect1 fieldToSelect2' // You can control which fields to include
  }).
  exec();

答案 1 :(得分:0)

您可以像这样在请求模型中设置用户类型

  type: schema.Types.ObjectID,
  ref: 'users'

哪些用户标识了用户的架构,并且要在响应中发送整个用户数据,请使用填充,在填充中您也可以省略密码

现在,如果您在请求数据库中看到mondodb数据库,则不会保存整个用户对象,而只会保存user_id,因此您无权访问该用户。您必须发送另一个请求,以从给定的user_id获取用户数据,这是不好的。解决方案是按照我说的那样设置架构,并在发送响应时将请求的数据用于填充,以将userdata添加到响应中

res.json({request: requests.find(//options to find a specified request).populate('users','name')})

第一个参数是作为用户的模型,第二个参数是用户模型的所需字段,例如,这将返回用户的名称。您可以添加更多参数以添加除密码之外的所有参数

答案 2 :(得分:0)

您可以做这样的事情

var userSchema = new Schema({
    requests: [
        {
            type: Schema.Types.ObjectId,
            ref: "Request",
        }
    ]
});

var requestSchema = new Schema({
    user: {
        type: Schema.Types.ObjectId,
        ref: "User"
    }
})