如果您正在使用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'
}
});
在此示例中,我们有两个模型:User
和Post
。用户模型具有称为帖子的字段,该字段是引用Post
documents的ObjectId
值的数组。邮政模型的字段称为作者,这是一个引用用户文档的ObjectId
value。
要使用相应的帖子文档填充用户文档的帖子字段,您可以使用pupulate()函数:
const user = await User.findById(userId).populate('posts');
这将使用指定的_id值检索用户文档,然后以指定的postid值检索邮政区。