我的目标是在整个数据库的所有子文档中具有唯一的“ reflink”字段。
我正在使用库mongoose-unique-validator在findOneAndUpdate猫鼬函数期间对唯一字段启动验证。它不起作用,因为我仍然可以使用“ reflink”添加与现有文档完全相同的子文档。
这是我的父文档,其中嵌套了子文档:
const mongoose = require("mongoose");
const { Schema } = mongoose;
const ReflinkSchema = require("./Reflink");
const airdropSchema = new Schema({
reflinks: [ReflinkSchema],
});
mongoose.model("airdrops", airdropSchema);
具有唯一reflink值的嵌套sudocument模式:
const mongoose = require("mongoose");
const uniqueValidator = require('mongoose-unique-validator');
const { Schema } = mongoose;
const reflinkSchema = new Schema({
reflink: { type: String, unique: true, uniqueCaseInsensitive: true },
userEmail: String,
_user: { type: Schema.Types.ObjectId, ref: "User" }
});
reflinkSchema.plugin(uniqueValidator);
mongoose.model("reflinks", reflinkSchema);
然后使用新的reflink子文档更新空投文档。此函数应阻止添加两个具有相同reflink字段的reflink,但不会:
const addReflinkByUser = () => {
Airdrop.findOneAndUpdate(
{ _id: airdropId },
{ $push: { reflinks: { reflink: reflink, _user: req.user.id, userEmail: req.user.email } } },
{ new: true, runValidators: true, context: "query" },
async (err, doc) => {
if (err) {
res.status(500).end();
}
req.user.points -= 3;
await req.user.save();
res.send(doc);
}
);
};
我尝试使用:
请帮助我解决此问题。告诉是否需要更多信息/代码。