猫鼬保存 vs 插入 vs 创建

使用 Mongoose 将文档(记录)插入 MongoDB 有哪些不同的方法?

我目前的尝试是:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var notificationsSchema = mongoose.Schema({
"datetime" : {
type: Date,
default: Date.now
},
"ownerId":{
type:String
},
"customerId" : {
type:String
},
"title" : {
type:String
},
"message" : {
type:String
}
});


var notifications = module.exports = mongoose.model('notifications', notificationsSchema);


module.exports.saveNotification = function(notificationObj, callback){
//notifications.insert(notificationObj); won't work
//notifications.save(notificationObj); won't work
notifications.create(notificationObj); //work but created duplicated document
}

知道为什么插入和保存在我的情况下不起作用吗?我尝试创建,它插入2个文档,而不是1。真奇怪。

97995 次浏览

.save()是模型的一个实例方法,而 .create()作为方法调用直接从 Model调用,本质上是静态的,并以对象作为第一个参数。

var mongoose = require('mongoose');


var notificationSchema = mongoose.Schema({
"datetime" : {
type: Date,
default: Date.now
},
"ownerId":{
type:String
},
"customerId" : {
type:String
},
"title" : {
type:String
},
"message" : {
type:String
}
});


var Notification = mongoose.model('Notification', notificationsSchema);




function saveNotification1(data) {
var notification = new Notification(data);
notification.save(function (err) {
if (err) return handleError(err);
// saved!
})
}


function saveNotification2(data) {
Notification.create(data, function (err, small) {
if (err) return handleError(err);
// saved!
})
}

导出您希望在外部使用的任何函数。

更多的在 猫鼬博士,或者考虑阅读参考的 Model原型在猫鼬。

您可以使用 save()create()

save()只能用于模型的一个新文档,而 create()可以用于模型。下面,我给出了一个简单的例子。

旅游模特

const mongoose = require("mongoose");


const tourSchema = new mongoose.Schema({
name: {
type: String,
required: [true, "A tour must have a name"],
unique: true,
},
rating: {
type: Number,
default:3.0,
},
price: {
type: Number,
required: [true, "A tour must have a price"],
},
});


const Tour = mongoose.model("Tour", tourSchema);


module.exports = Tour;

旅游管理员

const Tour = require('../models/tourModel');


exports.createTour = async (req, res) => {
// method 1
const newTour = await Tour.create(req.body);


// method 2
const newTour = new Tour(req.body);
await newTour.save();
}

确保使用方法1或方法2。