Mongo模式,具有唯一值的字符串数组

时间:2017-01-22 08:07:38

标签: arrays json mongodb mongoose mongoose-schema

我正在为mongo文档创建架构,除了防止非对象数组中的重复之外,我可以做任何事情。

我知道addToSet,但我指的是Mongo Schema。

我不想使用$ addToSet检查更新,而是希望这是我的架构验证的一部分。

以下示例。

let sampleSchema = {
   name: { type: 'String', unique: true },
   tags: [{ type: 'String', unique: true }]
}

以上代码段阻止名称具有重复值。它允许标签存储为字符串数组。

但是..我不能将数组限制为唯一的字符串。

{ name: 'fail scenario', tags: ['bad', 'bad', 'array']}

我能够插入这条应该是失败场景的记录。

3 个答案:

答案 0 :(得分:1)

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 = _.unique(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);
    })
});

答案 1 :(得分:1)

此方法基于Med的答案,处理引用,并完全在方案验证中完成。

$("a[onclick^='yt.www.watch.player.seekTo']")

答案 2 :(得分:-1)

我得出的结论是,通过Mongoose Schema无法做到这一点。

JSON模式就是这样完成的。

let schema = {
   name: { type: 'string' }
   tags: { 
      type: 'array',
      items: { type: 'string', uniqueItems: true }
   }
}

在创建Mongo Document之前,我将使用JSON模式进行验证。