Пн goose найти с несколькими и дополнительными полями - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в пн goose и в настоящее время я пишу приложение, чтобы изучить его. У меня есть схема художника и форма для поиска с несколькими дополнительными полями. Например, пользователь может указать имя, минимальный возраст и выполнить поиск по модели, не заполняя другие поля формы. На контроллере я беру все поля из формы через объект req.body, и у меня есть объект запроса с тысячью операторов if, я проверяю, не является ли свойство неопределенным, и если нет, я помещаю его в объект как свойство и объект передаются методу find. Проблема в том, что когда я заполняю минимальный возраст и помещаю в объект запроса это свойство query.min_age = { $gte: min_age}, $ gte преобразуется в строку и в результате не может правильно запустить метод find.

Пн goose Модель

const mongoose = require("mongoose");
const AlbumSchema = require("./album")
const CompanySchema = require("./company")

const Schema = mongoose.Schema;

const ArtistSchema = new Schema({
    name: String,
    age: Number,
    yearsActive: Number,
    albums: [AlbumSchema],
    company:[{type: Schema.Types.ObjectId, ref: "Company"}]
});

const Artist = mongoose.model("artist", ArtistSchema);

module.exports = Artist;

Контроллер

app.post("/", (req, res, next) => {
    const name = req.body.name;
    const min_age = req.body.min_age;
    const min_active = req.body.min_active;
    const sort = req.body.sort;
    const query = {};

    if(name) {
        query.name = name;
    }

    if(min_age) {
        query.min_age = { $gte: min_age};
    }

    if(min_active) {
        qyery.min_active = {gte: min_active};
    }

    Artist.find(query).
    sort(sort)
    .then( artists => {
         res.render("index", {
             artists: artists
        })
    });
});

На рисунке ниже изображена строка $ gte, когда я ее утешаю

1 Ответ

0 голосов
/ 26 апреля 2020

Ключи в JS объектах всегда преобразуются в строку, поэтому нет ничего плохого в том, что $gte является строкой на скриншоте, который вы опубликовали.

Что касается значения min_age в вашем коде я не вижу ничего, что конвертировало бы его в строку, и mon goose сам по себе тоже не делает этого.

Похоже, проблема в тестовом запросе. Проверьте, отправляете ли вы min_age как число в запросе POST или в виде строки. Это должно быть число, иначе вам нужно преобразовать его в число в контроллере (например, с parseInt())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...