无法在 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 数据库进行排序的主要内容,如果未能解决你的问题,请参考以下文章
Node.js+Express框架+Mongo学习第一个node.js实例
如何使用 mongo、passport 和 node js 更新用户的个人资料?
夺命雷公狗---node.js---19之项目的构建在node+express+mongo的博客项目4mongodb在项目中的基本引入