【问题标题】:Save objects to array type field in mongoose将对象保存到猫鼬中的数组类型字段
【发布时间】:2018-06-12 18:44:43
【问题描述】:

我想将我的 car 对象数组保存到我在猫鼬中的 user.cars 字段中。

我的用户架构如下所示:

const UserSchema = new Schema({
    firstName: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    cars: [{
        type: Array,
        required: false
    }]
})

我将用户汽车保存在汽车端点上,如下所示:

router.route('/cars')
  .post(async function (req, res) {
    User.findById(req.user._id)
      .then((user, err) => {
        if (err) {
           return res.json({err})
        }
        if (user && user._id) {
           user.cars = req.body.cars 
           user.save(function (err) {
             if (err) {
                res.status(500)
                return res.json({
                   success: false,
                   message: err.message || 'Update failed'
                  })
             }
             ioServer.sockets.emit('update-users')
             res.status(200).json({
                success: true,
                message: 'User updated successfully'
             })
           })
        } else {
          return res.json({message: 'No user', success: false})
        }
      })
      .catch(err => console.log(err))
  })

我的 req.body 日志如下所示:

{ cars: [
    {
        type: 'Sedan',
        make: 'BMW',
        model: '525i',
        [...]
    },
    {
        type: 'Coupe',
        make: 'Subaru',
        model: 'BRZ',
        [...]
    },
    {
        type: 'SUV',
        make: 'Toyota',
        model: 'Rav4',
        [...]
    }
    ]
}

此代码有效,但 mongoose 将数据保存为新数组,因此看起来像这样:

{ user.cars: [
    [
        {car},
        {car},
        ...
    ]
]}

但我想将 user.cars 作为对象数组获取,而不是将新数组传递给汽车。

非常感谢您帮助我找到代码中的错误位置。

【问题讨论】:

  • user.cars = req.body.cars 之前发布您的完整代码
  • 我发布了完整的端点代码@Ashish

标签: node.js mongodb mongoose


【解决方案1】:

其实你不需要找到用户再保存,而是可以使用$push操作符来设置汽车数组...

router.route('/cars')
  .post(async function (req, res) {
    User.findOneAndUpdate({_id: req.user._id}, {$push: { cars: {$each: req.body.cars}}})
      .then((user, err) => {
        if (err) {
           return res.json({err})
        }
        res.status(200).json({
           success: true,
           message: 'User updated successfully'
        })
      })
      .catch(err => console.log(err))
  })

【讨论】:

    【解决方案2】:

    在您的模型架构中,您将cars 的类型定义为Array。这就是为什么它像数组结构一样保存数据。

    cars: [{
            type: Array,
            required: false
        }]
    

    而是创建一个清晰的字段架构:

        cars: [{
           type: String,
           make: String,
           model: String,
           ...
        }]
    

    这将修复您的数据。

    【讨论】:

    • :Facepalm:谢谢!像魅力一样工作:)
    • @Robson 欢迎光临!
    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 2018-07-12
    • 2021-01-30
    • 1970-01-01
    • 2019-09-14
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多