无法在 Node.js 应用程序中使用 mongoose 对 MongoDB 数据库进行排序

Posted

技术标签:

【中文标题】无法在 Node.js 应用程序中使用 mongoose 对 MongoDB 数据库进行排序【英文标题】:Can't sort a MongoDB database using mongoose in a Node.js app 【发布时间】: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(不起作用)只是我遇到的问题的一个例子!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于无法在 Node.js 应用程序中使用 mongoose 对 MongoDB 数据库进行排序的主要内容,如果未能解决你的问题,请参考以下文章

JSONP 支持 node.js 和 mongo

Node.js+Express框架+Mongo学习第一个node.js实例

如何使用 mongo、passport 和 node js 更新用户的个人资料?

夺命雷公狗---node.js---19之项目的构建在node+express+mongo的博客项目4mongodb在项目中的基本引入

通过Mongoose(Node JS)在Mongo DB中插入没有JSON模式的JSON对象

Node.js Promises:异步推送到数组并保存