Иногда мне нужен документ для существования в БД, и я рад либо работать с существующим документом, либо создавать документ, если он отсутствует, и работать с новым.
Это похоже на довольно распространенный случай использования, но я просмотрел 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()
не будет работать, потому что он попытается изменить существующий документ и получить "повторяющийся индекс ошибок ключа"