Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

278
Views
Esquema Mongo, matriz de cadenas con valores únicos

Estoy creando el esquema para un documento mongo y puedo hacer todo excepto evitar duplicados en una matriz que no sea de objetos.

Conozco addToSet, pero me refiero a Mongo Schema.

No quiero verificar la Actualización usando $addToSet, sino que quiero que esto sea parte de la validación de mi esquema.

Ejemplo a continuación.

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

El fragmento anterior evita que el nombre tenga valores duplicados. Permite que las etiquetas se almacenen como una matriz de cadenas.

Pero... no puedo limitar la matriz para que sean cadenas únicas.

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

Puedo insertar este registro que debería ser un escenario fallido.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

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 = _.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); }) });
over 4 years ago · Santiago Trujillo Report

0

Llegué a la conclusión de que esto es imposible de hacer a través de Mongoose Schema.

El esquema JSON se hace así.

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

Validaré con el esquema JSON antes de crear el documento Mongo.

over 4 years ago · Santiago Trujillo Report

0

Este método se basa en la respuesta de Med, maneja las referencias y se realiza completamente en la validación del esquema.

 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(); });
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!