更新父文档时跨数据库的子文档字段的唯一性

时间:2019-08-18 09:38:51

标签: mongodb express mongoose

我的目标是在整个数据库的所有子文档中具有唯一的“ 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);
    }
  );
};

我尝试使用:

  • 通过等待doc.validateSync()手动启动验证-不起作用
  • 使用doc.save()保存文档-不起作用
  • 空投模式中的插件uniqueValidator-不起作用
  • 请帮助我解决此问题。告诉是否需要更多信息/代码。

    0 个答案:

    没有答案
    相关问题