Mongoose.js:如何实现创建或更新?

11 浏览
0 Comments

Mongoose.js:如何实现创建或更新?

我有一个请求,其中包含数据和_id。实现的代码应该如何更新已存在的记录,并在不存在记录时创建一个新记录?我的代码如下:

var obj = req.body;
Model.findById(obj._id, function(err, data){
    if (!data){
        var model = new Model(obj)
        model.save(function(err, data){
            res.send({method: 'create', error: err, data: data})
        })
    } else {
        Model.findByIdAndUpdate(obj._id, obj, function(){
            res.send({method: 'update', error: err, data: data})
        })
    }
})

我在思考是否有更好的方法来实现这个功能。

0
0 Comments

Mongoose.js: 如何实现创建或更新?

问题的出现的原因:在使用Mongoose.js时,如果需要在数据库中创建一个文档,或者更新已存在的文档,如何实现这个功能?

解决方法:可以使用Mongoose.js中的update方法,并使用upsert参数来实现创建或更新功能。具体实现如下:

var obj = req.body;
var id = obj._id;
delete obj._id;
if (id) {
    Model.update({_id: id}, obj, {upsert: true}, function (err) {...});
}

需要注意的是,这种方法不能应用模型的默认值和中间件。

在Mongoose 4.x中,可以使用setDefaultOnInsert选项来应用默认值,如果upsert创建了一个新的文档。具体实现如下:

Model.update({_id: id}, obj, {upsert: true, setDefaultsOnInsert: true}, cb);

另外,如果在更新操作之前需要删除obj中的_id字段,以免出现"Mod on _id not allowed"错误,可以在update之前先删除该字段。

此外,如果希望新创建的文档的_id字段与obj._id相等,即使在创建操作之前删除了_id字段,MongoDB也会自动生成一个新的_id。但是,实际测试中发现,新创建的文档的_id字段确实等于使用在查询选择器中使用的id值。

如果想要了解更多关于Mongoose Model update方法的信息,可以参考Mongoose Model update方法的文档。

对于为什么不应用模型的默认值的问题,这可能是一个奇怪的现象。不过在Mongoose 4.x中,可以通过设置setDefaultOnInsert选项来应用默认值。

对于有一个列表并且需要使用新元素更新该列表的对象,可以使用update方法中的$push操作符来实现。具体实现方式可以参考Mongoose.js的文档。

如果需要批量更新或创建文档,可以使用updateMany方法来实现。

需要注意的是,使用update方法时,如果存在pre钩子验证,将会被跳过。

以上就是关于使用Mongoose.js实现创建或更新功能的解决方法。如果你在使用Mongoose.js时遇到了类似的问题,希望这篇文章对你有所帮助。

0
0 Comments

Mongoose.js: 如何实现创建或更新?

在使用Mongoose.js时,我们经常需要处理创建或更新数据的操作。然而,在Mongoose.js中,原本提供的"update"方法已经被废弃,因此我们需要找到一种新的方法来实现这个功能。

上面的代码段给出了一种解决方案。首先,我们从请求体中获取到一个对象,并存储在变量obj中。然后,我们从obj中提取出_id属性,并将其删除。接下来,我们使用model.findOneAndUpdate方法来进行数据的创建或更新操作。

model.findOneAndUpdate方法接受三个参数。第一个参数是一个查询条件,我们使用{_id: id}来查询数据库中是否存在对应的记录。第二个参数是一个更新的对象,我们将obj作为更新的内容。第三个参数是一个选项对象,我们设置new为true,表示返回更新后的数据;同时设置upsert为true,表示如果查询不到对应的记录,则进行插入操作。

通过这种方式,我们可以实现在Mongoose.js中创建或更新数据的操作,同时也避免了使用已经废弃的"update"方法。

以上就是关于如何在Mongoose.js中实现创建或更新操作的讨论。希望对你有所帮助!

0