📜  node.js 中的猫鼬 - Javascript (1)

📅  最后修改于: 2023-12-03 15:33:10.597000             🧑  作者: Mango

Node.js 中的猫鼬 - Javascript

简介

猫鼬(Mongoose)是一个针对MongoDB的Javascript库,它使得在应用程序中使用MongoDB变得更容易。Mongoose提供了许多功能,包括对象模型绑定、查询构建、验证、钩子等等。

安装

可以通过npm进行安装:

npm install mongoose
连接MongoDB

在使用Mongoose之前,必须通过mongoose.connect方法连接MongoDB。方法接受一个连接字符串作为参数。如果连接成功,回调函数将被调用。

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true });

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  // we're connected!
});
定义模型

定义MongoDB中的文档需要创建一个Schema对象并将其传递给mongoose.model方法,该方法将生成一个Model对象。Model对象是用于实例化表示某个文档的Document对象的构造函数。

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

const kittySchema = new Schema({
  name: String
});

const Kitten = mongoose.model('Kitten', kittySchema);

const silence = new Kitten({ name: 'Silence' });
console.log(silence.name); // 'Silence'
查询

可以使用Model.find方法查询符合条件的文档。find方法接受一个查询条件对象作为参数,以及一个回调函数。回调函数将在查询完成后被调用,它的第一个参数是错误对象,第二个参数是查询到的文档。

Kitten.find({ name: /^fluff/ }, function (err, kittens) {
  if (err) return console.error(err);
  console.log(kittens);
});
更新

可以使用Model.update方法更新符合条件的文档。update方法接受一个查询条件对象作为第一个参数,第二个参数是要更新的字段,以及一个回调函数。

Kitten.updateOne({ name: 'Fluffy' }, { name: 'Shaggy' }, function(err, result) {
  if (err) return console.error(err);
  console.log(result);
});
删除

可以使用Model.deleteOne方法删除符合条件的文档。deleteOne方法接受一个查询条件对象作为参数,以及一个回调函数。

Kitten.deleteOne({ name: 'Fluffy' }, function (err) {
  if (err) return console.error(err);
});
验证

可以使用Mongoose提供的验证功能验证文档的有效性。可以为字段定义验证器,验证器可以是内置的,也可以是自定义的函数。

const kittySchema = new Schema({
  name: { type: String, required: true },
  age: { type: Number, min: 0, max: 20 }
});

const Kitten = mongoose.model('Kitten', kittySchema);

const fluffy = new Kitten({ name: 'Fluffy', age: 5 });
fluffy.validate(function(err) {
  console.log(err);
});
钩子

可以使用Mongoose提供的钩子功能,在模型上定义预和后钩子。预处理钩子在保存文档之前执行,而后处理钩子在保存文档之后执行。

const kittySchema = new Schema({
  name: String,
  lastFed: Date
});

kittySchema.pre('save', function(next) {
  this.lastFed = new Date();
  next();
});

const Kitten = mongoose.model('Kitten', kittySchema);

const silence = new Kitten({ name: 'Silence' });
silence.save(); // `lastFed` will be updated!
总结

猫鼬是一个非常强大的Javascript库,它使得在应用程序中使用MongoDB变得更容易。Mongoose提供了许多功能,包括对象模型绑定、查询构建、验证、钩子等等。在实际开发中,熟练掌握猫鼬的使用是非常必要的。