有时我需要在数据库中存在一个文档,可以使用现有的文档,也可以创建新文档并使用它。
这似乎是一个相当普遍的用例,但我查看了Mongoose文档,没有找到相关内容。
Mongoose集合方法,如
注意:`findOneAndUpdate()`不起作用,因为它会尝试修改现有文档,并获得“重复键错误索引”。
这似乎是一个相当普遍的用例,但我查看了Mongoose文档,没有找到相关内容。
Mongoose集合方法,如
findOneAndUpdate()
和update()
,使用upsert: true
修改文档 - 如果文档存在,我不想修改它,只需获取对它的引用。
示例:(为@neillunn添加)我想添加一个用户,并引用名称为“foo”的公司。在此之前,我想查找具有{name: 'foo'}
的公司,如果不存在,则创建该公司。
示例2:(为@neillunn添加)我现在正在使用的代码来处理示例场景:// Find or create an an instance and return a cb with a reference to it.
var findOrCreate = function(model, criteria, cb){
model.update(criteria, criteria, {upsert: true}, function(err, numberAffected, raw){
if ( ! raw.updatedExisting ) {
console.log('Created instance')
} else {
console.log('Found existing instance')
}
model.findOne(criteria, cb)
})
}
注意:`findOneAndUpdate()`不起作用,因为它会尝试修改现有文档,并获得“重复键错误索引”。
company._id
,但这只是当前的用例。 - mikemaccana