【问题标题】:Can't sort a MongoDB database using mongoose in a Node.js app无法在 Node.js 应用程序中使用 mongoose 对 MongoDB 数据库进行排序
【发布时间】:2020-10-30 11:31:30
【问题描述】:

我绝不是开发人员!不过,我正在尝试为我的创业公司制作一个演示应用程序。

我在尝试对猫鼬“查找”的结果进行排序时遇到了很多麻烦(几天和几天)。我已经广泛寻找答案,但找到了工作。这是一个不起作用的代码 sn-p:

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 行时崩溃。

令人发指的是,以下代码运行良好。唯一的问题是它在我定义排序指标之前执行排序,这对我来说没用。

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);

    });
};

这里排序发生在从顶部开始的第二行。但是,就像我说的那样,这并没有使用适当的指标进行排序。

最后,我尝试了代码的各种变体以使其正常工作。第一个 sn-p(不起作用)只是我遇到的问题的一个例子!

【问题讨论】:

    标签: node.js sorting asynchronous mongoose promise


    【解决方案1】:

    经过更多的头撞后,我想我已经解决了我的问题。以下代码明确提供了排序方法,似乎可以工作!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 2020-05-08
      • 2017-08-05
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多