Мне нужно отфильтровать товары коллекции по идентификатору категории, который является справочным полем.
product.js
const restful = require('node-restful')
const mongoose = restful.mongoose
const productSchema = new mongoose.Schema({
name: { type: String, required: true },
category: {type: mongoose.Schema.Types.ObjectId, ref: 'CategoryProduct'}
})
productSchema.pre('find', function () {
this.find().populate('category')
})
module.exports = restful.model('product', productSchema)
rout.js
const express = require('express')
const auth = require('./auth')
module.exports = function (server) {
const protectedApi = express.Router()
server.use('/api', protectedApi)
const Product = require('../api/product/productService')
Product.register(protectedApi, '/products')
}
Если я запускаю это на Postman, http://localhost:3003/api/products/?name__regex=/test/i
, я могу получить все продукты, которые содержат 'test' в названии.
Поэтому я пытаюсь получить все продукты определенной категории, выполнив это http://localhost:3003/api/products/?category=5af3ac4372edc6000468d766
.Но так как категория является objectID, я получаю эту ошибку:
{
"message": "Cast to ObjectId failed for value \"5\" at path \"category\" for model \"SimpleProduct\"",
"name": "CastError",
"stringValue": "\"5\"",
"kind": "ObjectId",
"value": 5,
"path": "category"
}
Как мне отфильтровать товары по категориям?Я не знаю, как правильно обработать этот параметр и перейти к mongoose
Вот мой файл CategoryProduct.js
const restful = require('node-restful')
const mongoose = restful.mongoose
const categorySchema = new mongoose.Schema({
name: {type: String, required: 'O campo Categoria é obrigatório'},
status: {type: Number, required: true},
updated_at: {type: Date}
})
module.exports = restful.model('CategoryProduct', categorySchema)