我正在为mongo文档创建架构,除了防止在非对象数组中重复之外,我可以做所有事情。
我知道addToSet,但我指的是Mongo Schema。
我不想使用$ addToSet来检查Update,而是希望它成为我的架构验证的一部分。
下面的例子。
let sampleSchema = { name: { type: 'String', unique: true }, tags: [{ type: 'String', unique: true }] }
上面的代码段可防止名称重复值。它允许将标签存储为字符串数组。
但是..我不能将数组限制为唯一的字符串。
{ name: 'fail scenario', tags: ['bad', 'bad', 'array']}
我可以插入此记录,这应该是失败的情况。
const express = require('express'); const router = express.Router(); const mongoose = require('mongoose'); const _ = require('underscore'); let sampleSchema = new mongoose.Schema({ name: { type: 'String', unique: true }, tags: [{ type: 'String' }] }) sampleSchema.pre('save', function (next) { this.tags = _.uniq(this.tags); next(); }); const Sample = mongoose.model('sample', sampleSchema, 'samples'); router.post('/sample', function (req, res, next) { const sample = new Sample(req.body); sample.save() .then((sample) => { return res.send(sample); }) .catch(err => { return res.status(500).send(err.message); }) });