首页 > 解决方案 > 如何使用架构创建新文档?

问题描述

我正在尝试使用我的架构创建新文档

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}
)

但是使用模式会导致这个问题

标签: mongoosemongoose-schema

解决方案


使用您的模型实例创建文档,即

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!
    }
)

推荐阅读