2017-01-22 13 views
0

mongoドキュメントのスキーマを作成しています。オブジェクト以外の配列で重複を防ぐ以外はすべて実行できます。Mongoスキーマ、一意の値を持つ文字列の配列

私はaddToSetについて認識していますが、私はMongo Schemaを参照しています。

私は$ addToSetを使用して更新をチェックしたくないのですが、私はこれを自分のスキーマ検証の一部にしたいと思います。以下

例。

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

上記のスニペットは、名前が重複する値を持つことを防止します。タグを文字列配列として格納することができます。

しかし、配列を一意の文字列に制限することはできません。

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

私はこのシナリオを失敗シナリオとして挿入することができます。

+0

可能な重複(http://stackoverflow.com/questions/15921700/mongoose-unique-values-in-nested-array-of-objects) – Karlen

+0

I $ addToSetを認識していますが、私はMongo Schemaを参照しています。 – Proximo

答えて

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

答えをありがとうが、私はスキーマだけで、コードではなく、保存ではなく、マングースの更新メソッドでこれを行うようにしています。 – Proximo

+0

アンダースコアでは、_.uniq not _.uniqueです。また、ここに参考文献と共に動作する改訂版があります: 'this.tags = _.uniq(this.tags、function(i){return(i._id)?i._id.toString():i;} ); ' – BuffMcBigHuge

-1

私は、これがMongoose Schemaを介して行うことは不可能であるという結論に達しました。

JSONスキーマはそうです。

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

Mongoドキュメントを作成する前にJSONスキーマで検証します。

0

このメソッドは、Medの回答を基に作成され、参照を処理し、スキーム検証で完全に実行されます。

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

}); 
[オブジェクトのネストされた配列におけるマングースユニークな値]の
関連する問題