发布到具有ObjectId多对一关系的mongoDb

问题描述 投票:0回答:1

猫鼬/ MongoDB问题

我有一个包含基本配置文件数据的所有者模型。

我有一个辅助模型: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)

但是我不确定如何最好地做到这一点,将其链接等。​​

我可以对Owners表执行GET请求以获取Owner数据,但是将其作为值的一部分发布到OwnerImages不会成功链接两个表。

我是否只需要在OwnerImages中存储对所有者ID的字符串引用,或者有更聪明的方法?

或者我应该只是将用户ID的字符串发布到猫鼬中,然后从那里映射到Owner表?

试图尽我所能解释最好的方法,但是眼睛很累,所以请问是否有任何混淆!非常感谢

reactjs mongodb mongoose axios
1个回答
0
投票

没有看到您的确切设置,我认为您可以根据需要修改此设置:

// 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...
  });
© www.soinside.com 2019 - 2024. All rights reserved.