Как добавить схему в другой массив схем? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть адресная схема и схема клиента.У меня есть массив адресов полей внутри моей схемы клиента.Я буду отправлять модель адреса в качестве моего тела запроса и идентификатор клиента в качестве параметра запроса.Как я могу сохранить этот адрес в массиве адресов, который объявлен в схеме клиента?

Это моя схема клиента

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?
    }
});

Сначала какой тип я должен поместить в массив адресов, который находится внутри схемы клиента?

После того, как я найду клиента, которому я собираюсь добавить адрес, что мне делать?Документации Mongoose 5.4.11 мне не хватило.Эта ссылка показалась мне необходимой, но я не понял, как решить эту проблему.

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

1 Ответ

0 голосов
/ 11 февраля 2019

ОК, так что в основном вы ищете: ассоциация.Вам необходимо установить соединение между моделью «Пользователь» и «Клиент».

Мы скажем, что Адрес принадлежит объекту «Ссылка пользователя и пользователя», например, по идентификатору.

Рассмотрим пример:

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 для более.

...