Express Node js在路由中对架构对象进行排序

时间:2019-01-28 06:17:04

标签: node.js mongodb express

我使用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路由给出的模式对象进行排序

2 个答案:

答案 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);
    });