Mi problema es que tengo una colección MongoDB llamada 'vendida', que contiene algunos campos de cadena y algunos campos numéricos.
const soldSchema = new Schema( { sku: String, hsn: String, qty: Number, article: String, mrp: Number, disc: Number, taxrate: Number, tax: Number, total: Number, orderid: String, }, { collection: "sold", timestamps: true } ); const Sold = mongoose.model("sold", soldSchema); module.exports = { Customer, Stock, Sold, Order };El 'Cliente', 'Stock' y 'Pedido' son otros esquemas que se encuentran en el mismo módulo.
Para el esquema vendido, recibí los datos del front-end, que es una matriz de objetos como este, como se muestra a continuación:
[ { sku: '10005', hsn: '3652', qty: '3', article: 'tops', mrp: '550', disc: '0', taxrate: '5', tax: '82.50', total: '1732.50', orderid: '1633515982545' }, { sku: '10005', hsn: '3652', qty: '3', article: 'tops', mrp: '550', disc: '0', taxrate: '5', tax: '82.50', total: '1732.50', orderid: '1633515982545' }, { sku: '10005', hsn: '3652', qty: '3', article: 'tops', mrp: '550', disc: '0', taxrate: '5', tax: '82.50', total: '1732.50', orderid: '1633515982545' } ]La matriz anterior es el resultado de req.body, es decir, console.log(req.body)
Si cambio todos los campos para escribir 'String' en soldSchema, entonces todos los valores se insertan de una sola vez.
Esta función funciona bien con todos los valores de cadena en el esquema.
async function insertManySold(req, res) { let items = req.body; try { let result = await model.Sold.insertMany(items); res.json(result); } catch (error) { res.json(error); } }Pero, si cambio los tipos de datos a Números para algunos campos en el esquema como se mencionó anteriormente, entonces no funciona. Por favor, hágame saber cómo lograr esto.
He buscado muchos artículos en la web pero no pude encontrar la respuesta. ¿Me podría ayudar?
Su código anterior no funcionará para cadenas que contengan caracteres como (abc...z), Number convertirá cualquier cadena que contenga alfabetos a NaN, debería intentarlo de esta manera.
const object1 = { sku: '10005', hsn: '3652', qty: '3', article: 'tops', mrp: '550', disc: '0', taxrate: '5', tax: '82.50', total: '1732.50', orderid: '1633515982545' } const data = {} for (const [key, value] of Object.entries(object1)) { const temp_value = Number(value) // Here we are checking for NaN and 0 data[key] = temp_value ? temp_value : temp_value == 0 ? 0 : value } console.log(data);Su camino dará este error ejecutar debajo del código
let items= { sku: '10005', hsn: '3652', qty: '3', article: 'tops', // Look for this key mrp: '550', disc: '0', taxrate: '5', tax: '82.50', total: '1732.50', orderid: '1633515982545' } let data = {} for ( let key in items ) { data[key] = Number(items[key]) } console.log(data)cuando publiqué esta pregunta, era muy nuevo en javascript, por lo que no podía pensar en ello como un programador, la respuesta es muy simple, todo lo que tiene que hacer es analizar el objeto, es decir, req.body nuevamente. quiero decir, crea un nuevo objeto e inserta todos los valores en él mediante un bucle sobre req.body. como esto.
let items=req.body let data = {} for ( let key in items ) { data[key] = Number(items[key]) }si el req.body tiene algún valor numérico, se analizará en números y se almacenará en los datos del nuevo objeto.
esta solución funcionó para mí si hay algún otro enfoque para lo mismo, compártalo conmigo aquí.
tanques
Sugiero que esto se maneje directamente desde el front-end. De lo contrario, debe convertir para cada clave numérica conocida, ya que este Number convertirá cada cadena que tenga valores numéricos en números. cadena con char. datos en NaN.
y, como está almacenando sku,hsn,orderId en String, pero Number se convertirá en un valor numérico. así que sugiero encarecidamente manejar esto directamente desde la interfaz.