猫鼬备忘单
#网络开发人员 #database #mongodb #mongoose

mongoose

如果您正在使用Node.js中的MongoDB的流行对象数据建模(ODM)库,则拥有快速参考指南或“备忘单”可能会非常有帮助。在这篇博客文章中,我们简要摘要概述了按类别组织的一些最常用的杂种方法和语法,以帮助您更加有效地使用这种强大的ODM。

模式定义

const { Schema } = require('mongoose');

const userSchema = new Schema({
  name: String,
  email: { type: String, unique: true },
  age: Number,
  isAdmin: { type: Boolean, default: false },
  createdAt: { type: Date, default: Date.now }
});

模型定义

const mongoose = require('mongoose');
const userSchema = require('./userSchema');

const User = mongoose.model('User', userSchema);

Creating a document
const user = new User({
  name: 'John Doe',
  email: 'johndoe@example.com',
  age: 30
});

user.save();

查找文档

// Find all documents
const users = await User.find();

// Find documents that match a query
const admins = await User.find({ isAdmin: true });

// Find a single document by ID
const user = await User.findById(userId);

更新文档

// Update a single document by ID
await User.findByIdAndUpdate(userId, { name: 'Jane Doe' });

// Update multiple documents that match a query
await User.updateMany({ isAdmin: true }, { isAdmin: false });

删除文档

// Delete a single document by ID
await User.findByIdAndDelete(userId);

// Delete multiple documents that match a query
await User.deleteMany({ isAdmin: false });

验证

const userSchema = new Schema({
  name: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  age: { type: Number, min: 18 },
  isAdmin: { type: Boolean, default: false },
  createdAt: { type: Date, default: Date.now }
});

在猫鼬中,您可以使用参考或子插图来定义模型之间的关系。

*使用参考:
*

为了使用参考文献定义两个模型之间的关系,您可以在字段定义中使用REF属性。 REF属性指定目标模型的名称。这是一个例子:

const userSchema = new mongoose.Schema({
  name: String,
  posts: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Post'
  }]
});
const postSchema = new mongoose.Schema({
  title: String,
  content: String,
  author: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }
});

在此示例中,我们有两个模型:UserPost。用户模型具有称为帖子的字段,该字段是引用Postdocuments的ObjectId值的数组。邮政模型的字段称为作者,这是一个引用用户文档的ObjectIdvalue。

要使用相应的帖子文档填充用户文档的帖子字段,您可以使用pupulate()函数:

const user = await User.findById(userId).populate('posts');

这将使用指定的_id值检索用户文档,然后以指定的postid值检索邮政区。