Estoy tratando de filtrar una lista de productos por un parámetro de búsqueda que buscará productos que tengan el nombre de propiedad y el name de seller.store.name similar (LIKE en php) al parámetro de búsqueda.
viewAll: async (req, res) => { const search = req.query.search || ''; const user = User.find({ store.name: { $regex: search, $options: 'i' } }); const filter = search ? { name: { $regex: search, $options: 'i' }, seller: { user } } : {}; const products = await Product.find({ ...filter }) .populate('store', 'store.name store.img'); res.send({ products }); },Me estoy encontrando con dos problemas.
store.name usando el método db.collection.find . Recibo el error ',' expected.ts(1005) . He intentado usar tanto store.name como store['name'] .Estos son mis modelos:
producto.js
const mongoose = require('mongoose'); const productSchema = mongoose.Schema({ name: { type: String, required: true }, description: { type: String, required: true }, seller: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, image: { type: String, required: true }, price: { unitPrice: Number, unit: String, required: true }, stock: { amtAvail: Number, amtSold: { type: Number, default: 0, }, required: true }, active: { type: Boolean, required: true, default: true } }, { timestamps: true }); const Product = mongoose.model('Product', productSchema); module.exports = Product;usuario.js
const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true, unique: true }, email: { type: String, required: true, unique: true }, password: { type: String, required: true }, isSeller: { type: Boolean, default: false, required: true }, store: { type: Object, name: { type: String, required: true, unique: true }, description: { type: String, required: true }, img: { profile: String, header: [String] }, contact: { line: String, phone: Number, accountNumber: Number } }, address: String, }, { timestamps: true }); const User = mongoose.model('User', userSchema); module.exports = User;¡Cualquier ayuda e ideas serían muy apreciadas!