Публикация в mongoDb с ObjectId Отношение много к одному - PullRequest
0 голосов
/ 01 апреля 2020

Mongoose / MongoDB Вопрос

У меня есть модель владельцев, содержащая основные данные профиля c.

У меня есть вторичная модель: OwnersImages например

    {
        owner: { 
            type: Schema.Types.ObjectId,
            ref: 'Owners'
        },
        name: String,
        imageUrl: String,
    },
);

От клиента я хочу опубликовать imageUrl и имя в таблице OwnersImages. например,

          let values = {
            owner: this.state.user._id,
            name: this.state.field,
            imageUrl: this.state.url
          }
          axios.post(`${serverPath}/api/addFieldImage`, values)

Однако я не уверен, как лучше go об этом, связать его и т.д. c.

Я могу сделать GET-запрос к таблице Owners, чтобы получить Owner данных, но публикация этого как части значений в OwnerImages не удастся успешно связать две таблицы.

Нужно ли просто хранить строковую ссылку на идентификатор владельца в OwnerImages или есть более разумный способ сделать это?

Или я должен просто опубликовать строку идентификатора пользователя в пн goose, а затем сделать карту в таблице владельца изнутри?

Я пытался объяснить это так, как мог, но глаза устали, поэтому, пожалуйста, спросите, если есть путаница! Большое спасибо

1 Ответ

1 голос
/ 02 апреля 2020

Не зная ваших точных настроек, я думаю, что вы можете изменить это в соответствии со своими потребностями:

// In the Schema/Model files
const ownersSchema = Schema({
  // other fields above...
  images: [{ type: Schema.Types.ObjectId, ref: 'OwnersImages' }]
});

const ownersImagesSchema = Schema({
  // other fields above...
  owner: { type: Schema.Types.ObjectId, ref: 'Owners' },
});


// in the route-handler
Owners.findById(req.body.owner, async (err, owner) => {
  const ownersImage = new OwnersImages(req.body);
  owner.images.push(ownersImage._id);
  await ownersImage.save();
  await owner.save();
});

В качестве дополнительного примечания, я думаю, что модели обычно имеют единичные имена, поэтому Owner и OwnerImage. Коллекция тогда автоматически примет форму множественного числа. Просто пища для размышлений.

Если вы хотите загрузить их, вы можете связать их с populate(). Рассмотрите возможность загрузки всех OwnersImages, связанных с Owners в каком-либо обработчике маршрута, где параметром /:id является Owners id:

Owners
  .findOne({ _id: req.params.id })
  .populate('images')
  .exec(function (err, images) {
    if (err) return handleError(err);
    // do something with the images...
  });
...