Есть ли способ использовать запрос Model.find() с заполненным фильтром поля в node.js

avatar
user16452247
9 августа 2021 в 06:56
155
1
1

Я использую запрос Model.find() следующим образом

const model = require("../../models/product");

module.exports = async(filters) => {
        let data = Object.values(filters.data)[0]
        let field = Object.keys(filters.data)[0];
        const regex = new RegExp(escapeRegex(data), 'gi');
        return await model.find({ $or: [{
                [field]: regex }] }).populate("division_id").populate("type_id").populate("category_id").exec()
    }
    //$or:[ {'_id':objId}, {'name':param}, {'nickname':param} ]
function escapeRegex(text) {
    return text.replace(/[-[\]{}()*+?. \\^$|#\s]/g, "\\$&");
};

Фильтр

В фильтре я отправляю {данные: {имя: "a"} }

который дает все продукты с именем, начинающимся с "а", что нормально!

но теперь я хочу получить результат фильтра с определенным разделением

ответ включает только этот конкретный продукт подразделения

Схемы продуктов

_id: mongoose.Schema.Types.ObjectId,

division_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Division', required: [true, "Требуется идентификатор подразделения продукта"] },

name: {type: String, required: [true, "Требуется название продукта"] },

Схемы подразделений

_id: mongoose.Schema.Types.ObjectId,

name:{ type: String, обязательно: "Требуется название подразделения" },

Источник

Ответы (1)

avatar
Gytis TG
9 августа 2021 в 10:23
0

Попробуйте использовать пример здесь: https://mongoosejs.com/docs/populate.html#query-conditions

Я предполагаю, что это должно быть примерно так:

return await model.find({
  $or: [
    { [field]: regex } // By the way, if it's the only query in $or, you don't need $or
  ],
}
.populate({
  path: "division_id",
  match: { _id: <ObjectId> }
})
.populate("type_id")
.populate("category_id")
.exec();

Первый .populate будет немного расширен, чтобы включить конкретное совпадение. Там вы можете передать _id (например, или name, в зависимости от вашей схемы), чтобы соответствовать конкретному разделу.

user16452247
9 августа 2021 в 11:20
0

спасибо за ваш ответ ... но я все еще получаю сообщение об ошибке "Не удается прочитать свойство '_id' из null"

Gytis TG
9 августа 2021 в 19:17
0

@user16452247 user16452247 Это должно быть в какой-то другой строке, потому что в моем коде нет объекта, допускающего значение NULL.