Какова цель схемы Mongoose, если я выполняю upsert с findOneAndUpdate
call?
Все, что я могу найти, указывает на то, что если я делаю findOneAndUpdate
, мне нужно ссылаться на базовую схему вместо экземпляра.
Вот мои настройки:
const PersonSchema = new mongoose.Schema({
ssn: {
type: Number,
unique: true,
},
first: String,
last: String
})
const Person = mongoose.model("Person", PersonSchema)
const person = new Person({ssn: 123456789, first: "Foo", last: "Bar"})
Если я просто сделаю сохранение (а этот ssn уже существует, я получу «уникальное» нарушение).
person.save();
Вместо этого я узнаю, что мне нужно сделать что-то вроде
const options = { upsert: true, new: true }
const query = { ssn: 123456789 }
Person.findOneAndUpdate(
query,
{
ssn: 123456789,
first: "Foo",
last: "Bar"
},
options)
OR
const options = { upsert: true, new: true }
const query = { ssn: 123456789 }
const newPerson = Object.assign({}, person._doc)
// delete this so I don't get a conflict with Mongoose on the _id during insert
delete newPerson._id
Person.findOneAndUpdate(query, newPerson, options)
Кажется, что findOneAndUpdate
не заботится о конкретной модели (или экземпляре) и является просто механизмом, чтобы добраться до базового метода MongoDB.
Так ли это? Или я что-то упускаю, что должно быть очевидным?