Nodejs mongoose sort 如何传参?

Nodejs mongoose sort 如何传参?

var item = options.mDataProp_; this.find(criteria) .sort({item: -1}) .limit(options.perPage) .skip(options.perPage * options.page) .exec(cb)

item 是我传入的参数 但是在sort里写item,它会把item当成数据库中的字段,该怎么写呢?


4 回复

当然可以!在 Node.js 中使用 Mongoose 进行查询时,如果你需要动态地通过参数来指定排序字段,你需要将字符串转换为对象。这是因为 .sort() 方法期望一个对象作为参数,而不是一个字符串。

以下是一个示例代码,展示了如何动态地传递排序参数:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// 假设我们有一个简单的 Schema
const ItemSchema = new Schema({
    name: String,
    createdAt: { type: Date, default: Date.now }
});

const Item = mongoose.model('Item', ItemSchema);

// 假设你从请求中获取到的参数
const criteria = {}; // 你的查询条件
const item = 'createdAt'; // 你想排序的字段名
const order = -1; // 排序顺序,-1 表示降序,1 表示升序
const perPage = 10; // 每页显示的条目数
const page = 1; // 当前页码

// 构建排序对象
const sortObject = {};
sortObject[item] = order;

// 执行查询
Item.find(criteria)
  .sort(sortObject)
  .limit(perPage)
  .skip(perPage * (page - 1)) // 注意这里是从 0 开始的索引
  .exec((err, items) => {
    if (err) return console.error(err);
    console.log(items);
  });

在这个例子中,我们首先创建了一个简单的 Mongoose Schema ItemSchema。然后,我们定义了几个变量,包括排序字段 item 和排序顺序 order。我们通过构建一个对象 sortObject 来动态地设置排序字段,并将其传递给 .sort() 方法。

这样,你可以根据不同的参数动态地改变排序方式,而不需要硬编码排序字段。希望这对你有所帮助!


这样写: <code> var item = options.mDataProp_; var oj = {}; oj[item] = -1; this.find(criteria) .sort(oj) .limit(options.perPage) .skip(options.perPage * options.page) .exec(cb)</code>

过来人哈 当时也纠结过 之后也是借鉴别人写的 这算是js的特性哈

在使用 Mongoose 的 sort 方法时,如果需要动态地传递排序字段名和方向,可以通过将字段名和排序方式作为变量来实现。你需要将 item 字段名和排序方式(例如 -1 表示降序)作为变量传递给 sort 方法。

这里有一个示例,展示了如何动态设置排序参数:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// 定义一个简单的模式
const ItemSchema = new Schema({
    name: String,
    date: Date
});

const Item = mongoose.model('Item', ItemSchema);

// 假设这是你从其他地方获取的参数
let criteria = {};
let options = {
    page: 1,
    perPage: 10,
    item: 'date', // 这里可以是 'name' 或 'date'
    order: -1 // 你可以改变顺序,比如使用 1 表示升序
};

// 动态生成排序对象
let sortCriteria = {};
sortCriteria[options.item] = options.order;

Item.find(criteria)
    .sort(sortCriteria) // 使用动态排序对象
    .limit(options.perPage)
    .skip(options.perPage * options.page)
    .exec((err, items) => {
        if (err) return console.error(err);
        console.log(items);
    });

在这个例子中,sortCriteria 对象是根据 options 对象中的 itemorder 属性动态生成的。这样,当你将不同的值传递给 itemorder 时,排序逻辑将相应地更改。

回到顶部