Мангуст найти на одном и обновить на модели - PullRequest
0 голосов
/ 13 июня 2019

Какова цель схемы 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.

Так ли это? Или я что-то упускаю, что должно быть очевидным?

...