如何将项目推入猫鼬数组

时间:2019-05-18 09:25:25

标签: express mongoose

我在创建用户并想同时保存与此用户相关联的某些项目时遇到问题。

我设法在可以创建项目并引用与该项目关联的user_id的地方找到它,但是我无法解决如何将用户拥有的所有项目推入用户架构。

我尝试遍历req.body.taken并添加到用户模式,但是我只是返回null。

router.post('/data', async (req, res) => {


  var user = new User({
    name: req.body.name,
    website: req.body.website,
  })

  user.save(function (err) {
    if (err) {
      return next(err);
    }
  })

  req.body.taken.forEach((item) => {

    var item = new Item({
      x: item.x,
      y: item.y,
      xSize: item.xSize,
      ySize: item.xSize,
      user: user,
      imageSource: item.imageSource,
      user: user
    }
    )

    item.save(function (err) {
      if (err) {
        return next(err);
      }
    })



  })

const UserSchema = new Schema(
  {
    id: Number,
    name: String,
    website: String,
    items: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Item'
      }]

  },
  { timestamps: true }
);

const ItemSchema = new Schema(
  {
    id: Number,
    x: Number,
    y: Number,
    xSize: String,
    ySize: String,
    imageSource: String,
    user: { type: mongoose.Schema.ObjectId, ref: 'User' }
  },
  { timestamps: true }
);


  User.find({})
      .populate('items')
      .exec(function(error, items) {
          console.log(items)
      })


当我致电“用户查找”时,我想获取与该用户相关联的所有商品(它将是一个数组,作为req.body.taken是一个商品数组。

1 个答案:

答案 0 :(得分:1)

这里有几个问题。

  1. 您不等待user.save,很有可能在返回用户文档之前保存所有items。您应该awaituser.save做出承诺,或者将items.forEach循环放入回调中。同样,您保存的是整个对象,而不是返回的user._id,猫鼬不允许这样做,因为它与方案不匹配。使创建失败。

  2. 您没有在用户中保存items数组,如果该字段为空,您将如何期望填充它。您的代码流程需要稍作更改,以允许您更新此字段。