arrays - Node/Mongoose - 如果更新期间对象尚不存在,则无法在数组中创建对象

标签 arrays node.js mongodb mongoose

全部。从昨天起这一直困扰着我,任何帮助将不胜感激。我的用户模型有其他模型的数组,如下所示:

var userSchema = new Schema({               
addresses           : [{ type: mongoose.Schema.Types.ObjectId,
                         ref: 'Address' 
                      }]

现在,当在我的 Controller 中运行更新函数时,我想更新一个对象(如果它已存在于数组中),或者创建一个新对象(如果不存在)。我在地址实例中使用模型中的addressType 属性来检查地址是否已存在于数组中。

在我的 usersController 中: 创建函数:

function createAddress(req, res){
User.findOne({ user_id: req.params.id}, function(err, user){
    Address.create(req.body, function(err, address){
        user.addresses.push(address)
    })
})

}

这是更新函数的片段:

function updateUser (req, res) {
console.log("updating user in back end")
User.findOneAndUpdate({user_id: req.params.id}, req.body, function(err, user){
if(err) throw err

        Address.findOne({address_id: req.params.id}, req.body, function(err, address){
            if(err) throw err
                if({addressType: req.params.id} != req.body.addressType){
                    createAddress(req);
                } else {
                    Address.findOneAndUpdate({address_id: req.params.id}, req.body, function(err, address){
                if(err) throw err
                    })
                }

看起来它可以工作,但是每次运行它时,即使我通过 postman 发送完全相同的信息,我也会在数据库中得到一个新对象。任何帮助将不胜感激,我提前感谢您的宝贵时间。

最佳答案

if({addressType: req.params.id} != req.body.addressType)

您将对象与字符串进行比较。它始终不等于

if (address) {
  update();
} else {
  create();
}

更好的是使用 upsert 选项:

Address.findOneAndUpdate({address_id: req.params.id}, req.body, {
  upsert: true
}, callback);

Documentation

关于arrays - Node/Mongoose - 如果更新期间对象尚不存在,则无法在数组中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37380227/

相关文章:

php - 从 VALUES NOT EQUALS = array 的数据库中选择

无论数组大小如何,Java 多数组递归

javascript - JSON.stringify() 灾难性的

node.js - 我应该在哪里存储我的数据模型?

node.js - 如何使用 Mongoose 和 NodeJS 在 MongoDB 中保存嵌套数组

JavaScript 基础知识 : accessing nested-functions

c - 使用数组打印数字的形状

Node.js setTimeout 分辨率很低且不稳定

php - Laravel 5.3 + MongoDB 库中的 hasMany 关系问题 'jenssegers/laravel-mongodb'

mongoDB 地理空间查询 $geoWithin 出现错误 'Loop is not closed'