mongodb - salsoteca - klub mangosta facebook
¿Cómo empujar una matriz de objetos en una matriz en mangosta con una sola llamada? (3)
Necesito insertar múltiples valores en una matriz en mangosta usando una llamada. Intenté hacerlo usando una matriz más pequeña pero la matriz se está insertando como una sub-matriz.
var kittySchema = new mongoose.Schema({
name: String,
values: [Number]
});
var Kitten = db.model(''Kitten'', kittySchema);
Kitten.update({name: ''fluffy''},{$push: {values:[2,3]}},{upsert:true},function(err){
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
});
El resultado de llamar al código anterior tres veces da el siguiente resultado:
{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ [ 2, 3 ], [ 2, 3 ], [ 2, 3 ] ] }
Mientras que lo que quiero es algo como esto:
{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ 2, 3 ,2 ,3, 2, 3] }
Otra cosa que noté fue que el tipo en la matriz (valores) se especifica como Número, entonces ¿la opción ''estricta'' no aseguraría que no se inserte nada que no sean Números? En este caso, se permite insertar otra matriz.
O use el modificador $ each con $ addToSet:
https://docs.mongodb.com/manual/reference/operator/update/addToSet/#each-modifier
// Existing tags array { _id: 2, item: "cable", tags: [ "electronics", "supplies" ] } // Add "camera" and "accessories" to it db.inventory.update( { _id: 2 }, { $addToSet: { tags: { $each: [ "camera", "accessories" ] } } } )
(Actualización de diciembre de 2014) Desde MongoDB2.4 debes usar:
Kitten.update({name: ''fluffy''}, {$push: {values: {$each: [2,3]}}}, {upsert:true}, function(err){
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
});
Obsoleto vea otra solución a continuación usando $ push $ cada uno
Su ejemplo está cerca, pero desea $pushAll lugar de $push para tener cada valor agregado por separado (en lugar de insertar otra matriz en la matriz de values
):
var Kitten = db.model(''Kitten'', kittySchema);
Kitten.update({name: ''fluffy''},{$pushAll: {values:[2,3]}},{upsert:true},function(err){
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
});