Tengo algunas dudas para filtrar datos de algunos documentos que tienen un campo mixto, he notado que mongoose toma campos mixtos no como un objeto, sino como una matriz de 'cualquier' dato, o algo así, estoy en una investigación todavía, bueno, mi esquema se parece al siguiente ejemplo:
export const ProductSchema = createSchema({ active: Type.boolean({ default: true }), available: Type.boolean({ default: true }), balance: Type.number({ default: 0 }), typeMerc: Type.mixed({ default: {} }) }, { timestamps: true }); Por ejemplo, necesito encontrar documentos en los que mi objeto typeMerc contenga la clave 'ad0a' (dentro de typeMerc), mis documentos se ven así:
{ _id: ObjectId('6115b8e219f684ac15823') active: true available: true balance: 12 typeMerc: { ad0a: { props: "faa0e" data: "anyString" }, f0ea: { props: "fa45d", data: "anyString" } } }Si pruebo compás el siguiente código, obtengo los datos correctamente:
{ 'typeMerc.ad0a': { $exists: true }}Luego, en mi código he intentado algo como:
const searchId = 'ad0a' Product.find({ `typeMerc.${searchId}`: { $exists: true } }) Product.find({ `typeMerc.$.${searchId}`: { $exists: true } }) Product.find({ typeMerc[`${searchId}`]: { $exists: true } }) Product.find({ typeMerc[searchId]: { $exists: true } })Pero sin éxito.
Tienes que poner la cadena entre corchetes.
const searchId = 'ad0a' Product.find({ [`typeMerc.${searchId}`]: { $exists: true } })