Как создать новый документ со схемой? - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь создать новый документ с моей схемой

const schema = new mongoose.Schema({
  room: String,
  messages: Array
})
const ConversationModel = mongoose.model('Conversation', schema)
const Conversation = new ConversationModel()

Conversation.findOneAndUpdate({room: data.room})

Вывод на консоль:

UnhandledPromiseRejectionWarning: TypeError: Conversation.findOneAndUpdate is not a function

Я могу создать его без использования такой схемы

db.collection('conversations').findOneAndUpdate(
    {room: data.room},
    {$addToSet: {messages: ''}},
    {returnOriginal: false, upsert: true}
)

Но использование схемы вызывает эту проблему

1 Ответ

0 голосов
/ 13 января 2019

Создайте документ с экземпляром модели, т.е.

const conversationSchema = new mongoose.Schema({ room: String, messages: Array })    
const Conversation = mongoose.model('Conversation', conversationSchema)
const conversation = new Conversation({ room: data.room, messages: [''] })

conversation.save(err => {
    if (err) return handleError(err)
    // saved!
})

или с помощью метода create:

Conversation.create({ room: data.room, messages: [''] }, (err, conversation) => {
    if (err) return handleError(err)
    // saved!
});

или, для вставки больших партий документов

Conversation.insertMany([{ room: data.room, messages: [''] }], err => {

});

или с помощью findOneAndUpdate для модели

Conversation.findOneAndUpdate(
    { 'room': data.room, messages: [''] }, 
    { '$addToSet': { 'messages': ''} },
    { 'new': false, 'upsert': true }
    (err, conversation) => {
        if (err) return handleError(err)
        // saved!
    }
)
...