如何将架构添加到另一个架构数组?

时间:2019-02-11 18:53:04

标签: node.js mongoose mongoose-schema

我有地址模式和客户模式。我的客户架构中有一个字段地址数组。我将发送一个地址模型作为我的请求正文,并将客户ID作为请求参数。如何将该地址保存到在客户模式中声明的地址数组?

这是我的客户架构

const customerSchema = mongoose.Schema ({
  _id: mongoose.Schema.Types.ObjectId,
  name: String,
  phone_number: String,
  password: String,
  type:{type:String,enum:['admin','user']},
  adresses:['Adress'],
  orders:[{type: mongoose.Schema.Types.ObjectId, ref: 'Order'}]
});

这是我的地址架构

const addressSchema= mongoose.Schema({
    _id:mongoose.Types.ObjectId,
    postalCode:Number,
    city:String,
    district:String,
    neighborhood:String,
    streetNumber:String,
    no:Number,
    buildingName:String,
    apartmentNumber:Number,
    floor:Number,
    coordinates:{
        latitude:Number,
        longitude:Number
    },
    addressName:String,
    customerId: {type: mongoose.Schema.Types.ObjectId,ref:'Customer'}


}); 

我不知道我该怎么做。我正在寻找将要推送我的地址的客户。

这是我如何获得特定客户的方法

Customer.find({_id:req.params.customerId},(err,data)=>{
    if(err) return next(err);
    else{
      //What I am going to do here?
    }
});

首先我应该在客户模式内部的地址数组中放入哪种类型?

在找到要添加地址的客户之后,我该怎么办?猫鼬5.4.11文档对我来说还不够。该链接似乎是我所需要的,但我没有弄清楚如何解决此问题。

  

https://mongoosejs.com/docs/subdocs.html

1 个答案:

答案 0 :(得分:0)

好的,所以您基本上要寻找的是:关联。您需要在用户模型和客户模型之间建立连接。

我们将说,地址属于用户和用户引用地址对象,例如id。

考虑一个例子:

const personSchema = Schema({
  _id: Schema.Types.ObjectId,
  name: String,
  age: Number,
  stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

const storySchema = Schema({
  author: { type: Schema.Types.ObjectId, ref: 'Person' },
  title: String,
  fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});

const Story = mongoose.model('Story', storySchema);
const Person = mongoose.model('Person', personSchema);

现在让我们尝试将作者分配给特定的已创建故事:

const author = new Person({
  _id: new mongoose.Types.ObjectId(),
  name: 'Ian Fleming',
  age: 50
});

author.save(function (err) {
  if (err) return handleError(err);

  const story1 = new Story({
    title: 'Casino Royale',
    author: author._id    // assign the _id from the person
  });

  story1.save(function (err) {
    if (err) return handleError(err);
    // thats it!
  });
});

定义故事和人物之间的关系时,很容易操纵它们之间的引用。

在这种情况下,您应该在模型中定义参考,然后您就可以操纵字段:

Customer.findOne({_id:req.params.customerId}, function(error, customer) {
  if (error) {
    return handleError(error);
  }
  customer.address = newAddress; // set customer's address to the desired address
  // console.log(customer.address.city);
});

检查doc,了解更多信息。