有时我需要一个文档存在于数据库中,我很乐意使用现有文档,或者在缺少文档时创建该文档,然后使用新文档。
这似乎是一个相当常见的用例,但我查看了 Mongoose docs我什么也找不到。
Mongoose Collection 方法,如 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()
不起作用,因为它会尝试修改现有文档,并获得“重复键错误索引”
最佳答案
正如评论中所述, Mongoose 有一个插件可以做到这一点: http://github.com/drudge/mongoose-findorcreate
This Thread还描述了一种无需插件即可实现此目的的方法。我只是不确定它是否适用于 Mongoose 。
关于javascript - 如何在 Mongoose 中创建/查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117210/