MongoDB - 兴趣小组
返回
MongoDB
MongoDB 是一个基于分布式文件存储的数据库。 https://www.mongodb.com
@sword7月7日编辑于7月7日
如下是一个使用 mongoose 实现的点赞评论表结构,我们希望每个用户只能点赞一次,因此我们设计一个唯一索引,限制其重复写入。 const LikeCommentSchema = new Schema( { user: { type: ObjectId, ref: 'User', required: true }, comment: { type: ObjectId, ref: 'Comment', required: true }, status: { type: Boolean, default: true } } ); 第一种索引方法,在索引层进行创建索引 LikeCommentSchema.index({ user: 1, comment: 1 }, { unique: true }); 第二种索引方法,在数据库层进行限制重复,创建一个 index 字段,将 user.id 和 comment.id 拼接成一个字符串写入其中,然后对这个字段进行唯一索引 const LikeCommentSchema = new Schema( { user: { type: ObjectId, ref: 'User', required: true }, comment: { type: ObjectId, ref: 'Comment', required: true }, status: { type: Boolean, default: true } // 数据层多字段唯一索引,值为 ${user._id}_${comment._id} index: { type: String, required: true, unique: true } } );
点赞
回复
转发
收藏
@sword5月26日
在 Mongoose,你可以使用 validation 来防止数据库中重复数据。validation 定义在 SchemaType 中,是一种中间件。你也可以在 schema 创建你自己的 validation,或你可以使用 Mongooses 内置的 validation。为了防止重复,我们建议使用 unique 属性,它告诉 Mongoose 每个文档对于给定的路径都应该具有唯一的值。 这是 Email 在 MongoDB 上创建唯一索引的简单例子。 如果你想等待创建索引,可以使用 Mongoose's promised 的 Model.init() 事件,如下所示: const User = mongoose.model('User', mongoose.Schema({ email: { type: String, required: true, match: /.+\@.+\..+/, unique: true } })); await User.create([ { email: 'gmail@google.com' }, { email: 'bill@microsoft.com' }, { email: 'test@gmail.com' } ]); await User.init(); try { await User.create({ email: 'gmail@google.com' }); } catch(error) { error.message; // 'E11000 duplicate key error...' } 原文地址: https://masteringjs.io/tutorials/mongoose/mongoose-validate-unique-email
点赞
回复
转发
收藏
@sword4月26日编辑于4月27日
得益于同事的分享,知道了timestamps的一个小技巧,使用Mongoose创建数据库表时增加timestamps选项,创建数据会自动生成createdAt和updatedAt字段,并且当数据发生更新时,会自动更新updatedAt字段的日期。

着实觉得方便了不少,在知道这个方法之前,自己都是手动创建和更新createdAt和updatedAt,学到了(๑•̀ㅁ•́ฅ)
import mongoose from "mongoose"; const Schema = mongoose.Schema; const FeedSchema = new Schema({ content: { type: String, default: '' } // 手动创建方法 // createdAt: { type: Date, default: Date.now }, // updatedAt: { type: Date }, },{ // 自动创建方法,默认自动创建createdAt和updatedAt timestamps: true // 指定字段名称方法 // timestamps: { createdAt: 'createTime', updatedAt: 'updateTime' } });
1
1
转发
收藏