我使用Node js Express创建了一个应用程序,我需要知道如何在路由控制器中对模式对象进行排序。我的数据库是Mongo数据库。这是我当前的工作代码。
import express from 'express';
import cors from 'cors';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import License from './models/license'
const app = express();
const router = express.Router();
app.use(cors());
app.use(bodyParser.json());
mongoose.connect('mongodb://localhost/tnod');
const connection = mongoose.connection;
connection.once('open', () => {
console.log('MongoDB database connection established successfully!');
});
app.use('/', router);
router.route('/license').get((req, res) => {
License.find((err, licenses) => {
if(err)
console.log(err);
else
res.json(licenses);
});
});
我需要类似License.sort({"votes":1}).find() ...
的东西,以不同的方式尝试过。不工作!
我需要以某种方式对/license
路由给出的模式对象进行排序
答案 0 :(得分:1)
不幸的是,find()不返回回调函数 像你一样
License.find((err, licenses) => {})
在猫鼬中,可以通过以下任意一种方式进行排序:
License.find({}).sort('votes').exec((err, licenses) => { ... });
License.find({}).sort([['votes', 1]]).exec((err, licenses) => { ... });
License.find({}).sort({votes: 1}).exec((err, licenses) => { ... });
License.find({}, null, {sort: {votes: 1}}, (err, licenses) => { ... });
有一种特殊的语法可以更舒适地与promise一起使用,称为“异步/等待”。
const licenses = await License.find({}).sort({'votes': 1})
对于运行,您需要使函数异步 以您的代码为例
router.route('/license').get(async(req, res) => {
try{
const licenses = await License.find({}).sort({'votes': 1})
res.json(licenses);
} catch(e) {
console.log('error:-', e)
}
}}
最重要的License.find({ //pass condition to filter your data })
答案 1 :(得分:0)
以下示例返回名为 License 的集合中的所有文档,这些文档按 votes 字段升序排列。在 orderby 中指定一个负值以按降序排序,或者指定一个正值(例如1)以按升序 排序。
License
.find()
.orderby({"votes":1})
then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});