Не удается отсортировать базу данных MongoDB с использованием mon goose в приложении Node.js - PullRequest
1 голос
/ 09 июля 2020

Я ни в коем случае не разработчик! Тем не менее, я пытаюсь собрать демонстрационное приложение для своего стартапа.

У меня много проблем (дни и дни), пытаясь отсортировать результаты из mon goose "find". Я долго искал ответ, но нашел эту работу. Вот фрагмент кода, который НЕ работает:

const warehouses = require("../models/warehousesModel.js");

merchantWarehouseQuotes = (req, res) => {
    let p = new Promise(function(resolve, reject) {
        resolve(warehouses.find({location: req.body.location}).exec());
    });
    p.then((localWarehouses) => {
        let sortMethod = req.body.warehouseSorting;
        localWarehouses.forEach(s => {
            if (sortMethod == "price") {
                s.sortingMetric = s.pricePerCubicFoot;
            } else {
                s.sortingMetric = -s.metrics;
            };
            s.save();
        });

        return localWarehouses.sort({sortingMetric: 1}).exec();
    })
    .then((localWarehouses) => {
        console.log(localWarehouses);
    });
};

Приложение вылетает при сортировке, которую я пытаюсь выполнить на 5-й строчке из последней строки кода.

Как ни досадно, следующий код работает нормально . Единственная проблема заключается в том, что он выполняет сортировку ДО того, как я определил метрику сортировки c, которая для меня бесполезна.

merchantWarehouseQuotes = (req, res) => {
    let p = new Promise(function(resolve, reject) {
        resolve(warehouses.find({location: req.body.location}).sort({sortingMetric: 1}).exec());
    });
    p.then((localWarehouses) => {
        console.log(localWarehouses)
        let sortMethod = req.body.warehouseSorting;
        localWarehouses.forEach(s => {
            if (sortMethod == "price") {
                s.sortingMetric = s.pricePerCubicFoot;
            } else {
                s.sortingMetric = -s.metrics;
            };
            s.save();
        });

        return localWarehouses;
    })
    .then((localWarehouses) => {
        console.log(localWarehouses);

    });
};

Здесь сортировка происходит во второй строке сверху. Но, как я уже сказал, здесь не используются соответствующие метрики c для сортировки.

Наконец, я пробовал всевозможные варианты кода, чтобы заставить его работать. Первый фрагмент (который не работает) - лишь один из примеров моих проблем!

1 Ответ

0 голосов
/ 10 июля 2020

После очередной тряски головой, я думаю, что решил свою проблему. Следующий код, который явно предоставляет метод сортировки, похоже, работает!

localWarehouses.sort(function(a,b) {
                if (a.sortingMetric > b.sortingMetric) {
                    return 1;
                }
                else if (a.sortingMetric < b.sortingMetric) {
                    return -1;
                }
                return 0;
            })
...