Mangosta – Guardar matriz de cadenas

No puedo guardar una serie de cadenas en mi base de datos utilizando Mongoose .

(Tenga en cuenta que todo el código a continuación se simplifica para facilitar la escritura aquí)

Entonces declaro una variable de un esquema de persona que tengo:

 var newPerson = new Person ({ tags: req.body.tags }); 

El esquema en sí se ve como:

 var personSchema = new mongoose.Schema({ tags: Array }); 

Y cuando se trata de ahorrar es solo un simple:

 newPerson.save(function(err) { //basic return of json }); 

Entonces, al utilizar Postman, envío una matriz en el cuerpo. Sin embargo, cada vez que reviso la base de datos, solo muestra una entrada con la matriz en su totalidad, es decir, cómo la envié:

introduzca la descripción de la imagen aquí

¿Alguna idea de qué extra debo hacer?

Escribe de mi comentario:

La forma de especificar una matriz de cadenas en mongoose es así:

 var personSchema = new mongoose.Schema({ tags: [{ type: String }] 

Sin embargo, el problema aquí es más probable que lo haga con Postman, ya que está enviando la ‘matriz’ como una cadena. Puede verificar esto marcando el tipo de req.body.tags así:

 console.log(typeof req.body.tags) 

Si esto devuelve una Cadena, asegúrese de establecer el tipo de contenido en Postman en JSON como se ve en esta captura de pantalla en lugar de la opción predeterminada ‘datos de formulario’.

Intenta cambiar el esquema a

 var personSchema = new mongoose.Schema({ tags: [{type: String}] }); 

o puedes usar tipo mixto

 var personSchema = new mongoose.Schema({ tags: mongoose.Schema.Types.Mixed }); 

EDITAR

Creo que el problema es con la asignación. Utilizar:

 person.tags.push("string to push"); 

En primer lugar, como muchas personas han notado, el esquema debe cambiar para indicar que el campo de las tags está destinado a contener una serie de cadenas, y no solo una. Así que eso tiene que cambiar a:

 var personSchema = new mongoose.Schema({ tags: [String] }); 

La otra cosa que debe tener en cuenta (y que me causó muchos problemas), es que al guardar, asegúrese de usar una matriz nueva para el campo de tags . Por ejemplo, esto no funcionará:

 person.tags[0] = "new tag"; person.save(); 

En su lugar, necesitas hacer algo como:

 person.tags = person.tags.slice(); // Clone the tags array person.tags[0] = "new tag"; person.save(); 

Espero que esto ayude.

 var personSchema = new mongoose.Schema({ tags: [{type: String}] }); 

Usa esto en el esquema.

Salvando el Array:

 var etc = new modename({yourprimaryid: primaryid}); for (var i = 0; i < tag.length; i++) { etc.tag.push(tag[i]); } etc.save(function(err) { //whatever you want here } 

Definir un esquema:

 const schema = new Schema({ name: { type: String, required: true }, tags: [String] }); 

En el cartero, agregue cada elemento por separado usando la syntax de la matriz a continuación

 name:Thing tags[]:task tags[]:other tags[]:thing 

Datos de retorno:

 { "__v": 0, "name": "Thing", "_id": "5a96e8d0c7b7d1323c677b33", "tags": [ "task", "other", "thing" ] } 
 var schema = new Schema({ name: String, binary: Buffer, living: Boolean, updated: { type: Date, default: Date.now }, age: { type: Number, min: 18, max: 65 }, mixed: Schema.Types.Mixed, _someId: Schema.Types.ObjectId, decimal: Schema.Types.Decimal128, array: [], ofString: [String], ofNumber: [Number], ofDates: [Date], ofBuffer: [Buffer], ofBoolean: [Boolean], ofMixed: [Schema.Types.Mixed], ofObjectId: [Schema.Types.ObjectId], ofArrays: [[]], ofArrayOfNumbers: [[Number]], nested: { stuff: { type: String, lowercase: true, trim: true } }, map: Map, mapOfString: { type: Map, of: String } }) // example use var Thing = mongoose.model('Thing', schema); var m = new Thing; m.name = 'Statue of Liberty'; m.age = 125; m.updated = new Date; m.binary = Buffer.alloc(0); m.living = false; m.mixed = { any: { thing: 'i want' } }; m.markModified('mixed'); m._someId = new mongoose.Types.ObjectId; m.array.push(1); m.ofString.push("strings!"); m.ofNumber.unshift(1,2,3,4); m.ofDates.addToSet(new Date); m.ofBuffer.pop(); m.ofMixed = [1, [], 'three', { four: 5 }]; m.nested.stuff = 'good'; m.map = new Map([['key', 'value']]); m.save(callback);