No dudes en divulgar nuestro sitio y códigos en tus redes, ayúdanos a ampliar nuestra comunidad.
Solución:
Hola, solo necesita declarar el modelo de esquema con su nombre dinámico, así:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// our schema
function dynamicSchema(prefix)
var addressSchema = new Schema(
dir : type : String, required : true, //los 2 nombres delimitados por coma (,) ej. Alberto,Andres
city : type : String, required: true, //la misma estructura que para los nombres ej. Acosta, Arteta
postal : type : Number, required : true,
_home_type : type : Schema.Types.ObjectId, required : true, ref : prefix + '.home_type',
state : type : String, required : true,
telefono : String,
registered : type : Date, default: Date.now
);
return mongoose.model(prefix + '.address', addressSchema);
//no we export dynamicSchema function
module.exports = dynamicSchema;
entonces en su código en cualquier lugar puede hacer esto:
var userAdress = require('address.js')(id_user);
var usrAdrs1 = new userAddress(...);
userAdrs1.save();
Ahora vaya a su mongo shell & list collections (use mydb y luego muestre las colecciones), verá una nueva colección para la dirección con uid prefix. De esta forma, mongoose creará una nueva dirección de colección para cada uid de usuario diferente.
Utilice la función para obtener el modelo de forma dinámica.
/*
* Define Schemas as you used to
*/
const ConvForUserSchema = new Schema(
user_id: Number,
conv_hash: String,
archived: Boolean,
unread: Boolean
,
versionKey : false,
strict: false
);
/*
* Define the dynamic function
*/
const models = ;
const getModel = (collectionName) =>
if( !(collectionName in models) )
models[collectionName] = connection.model(
collectionName, ConvForUserSchema, collectionName
);
return models[collectionName];
;
Luego obtenga el modelo dinámico usando la función
const result = getModel("YourCollectionName").findOne()
La lógica del nombre de la colección está codificada de forma rígida en todo el código base de Moongose, de modo que la partición del lado del cliente simplemente no es posible tal como están las cosas ahora.
Mi solución fue trabajar directamente con el controlador mongo:
https://github.com/mongodb/node-mongodb-native
Esto resultó excelente, la flexibilidad de trabajar directamente con el conductor permite todo lo necesario y la sobrecarga de Moongose no parece agregar mucho en ningún caso.
Puedes añadir valor a nuestro contenido contribuyendo tu veteranía en las notas.