Mongo schema, array of string with unique values Mongo schema, array of string with unique values mongoose mongoose

Mongo schema, array of string with unique values


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);    })});


I've come to the conclusion that this is impossible to do via Mongoose Schema.

JSON schema is done like so.

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

I'll validate with JSON schema before creating Mongo Document.


This method builds on Med's answer, handles references, and done completely in scheme validation.

let sampleSchema = new mongoose.Schema({    strings: [{type: 'String'}],    references: [{type: mongoose.Schema.Types.ObjectId, ref: 'Reference'],});sampleSchema.pre('save', function (next) {    let sample = this;    sample.strings = _.uniq(sample.strings, function(i) {return (i._id) ? i._id.toString() : i;});    sample.references = _.uniq(sample.references, function(i) {return (i._id) ? i._id.toString() : i;});    return next();});