【问题标题】:Sorting in mongoose在猫鼬中排序
【发布时间】:2020-11-21 06:50:51
【问题描述】:

好吧,这很奇怪,但排序不起作用。它不会抛出任何错误,但排序不起作用。

try {
    properties = await Property.find({}).sort("-minimumPrice");
 
  } catch (err) {
   console.log(err)
  }

我也试过了,但效果不佳:

try {
    properties = await Property.find({}).sort({minimumPrice: "desc"});
 
  } catch (err) {
   console.log(err)
  }

【问题讨论】:

  • 是的。还是不行。整个排序的事情都不起作用
  • 我的数据:{ name: property1 minimumPrice: 4000, } { name: property2 minimumPrice: 8000 } 现在预期的结果应该是,应该先返回 property2

标签: node.js mongodb mongoose


【解决方案1】:

请参阅here 了解有关排序和 here 是关于 mongoose async/await 的一些不错的官方文档

您应该使用 .exec() 和 await 以获得更好的堆栈跟踪,排序可以采用以下值:ascdescascendingdescending1-1

try {
    let properties = await Property.find(query).sort({"minimumPrice": -1}).exec() 
} catch (err) {
   console.log(err)
}

这一切都假设您的query 是正确的并且正在检索要排序的文档。

更新

我了解了你的整个情况,并使用你提供的内容创建了一个测试。

const mongoose = require("mongoose");
var Schema = mongoose.Schema;
var propertySchema = new Schema({
  name: String,
  minimumPrice: Number
});
var Property = mongoose.model('Property', propertySchema);

//Testing
(async function() {
  try {
    //connect to mongo
    await mongoose.connect('mongodb://localhost:27017/testing', { useNewUrlParser: true, useUnifiedTopology: true });

    //First, delete all properties
    await Property.deleteMany({}).exec();

    let properties = [];
    //Insert 5 properties
    for (var i = 1; i < 6; i++) {
      properties.push({ name: "property" + i, minimumPrice: Math.round(Math.random() * 10000) });
    }

    //Insert all our random properties
    await Property.create(properties);

    console.log(properties);

    //Now, retrieve all our properties
    let sortedProperties = await Property.find({}).sort({ minimumPrice: -1 }).exec();

    console.log("sorted", sortedProperties);
  } catch (err) {
    console.log(err);
  }
})();

数据库输入:

[                                           
  { name: 'property1', minimumPrice: 3846 },
  { name: 'property2', minimumPrice: 7910 },
  { name: 'property3', minimumPrice: 7234 },
  { name: 'property4', minimumPrice: 4444 },
  { name: 'property5', minimumPrice: 6366 } 
]                                           

排序输出:

[
  {
    name: 'property2',
    minimumPrice: 7910
  },
  {
    name: 'property3',
    minimumPrice: 7234
  },
  {
    name: 'property5',
    minimumPrice: 6366
  },
  {
    name: 'property4',
    minimumPrice: 4444,
  },
  {
    name: 'property1',
    minimumPrice: 3846
  }
]

您可以看到属性返回排序。这让我假设,您在某处插入了 minimumPrice 作为字符串。

【讨论】:

  • 仍然无法正常工作。我试过 await Property.find({}).sort({ minimumPrice: -1 }).exec();只是为了验证问题不是来自我使用 find 方法设置的查询参数
  • 你使用的是哪个版本的 mongo 和 mongoose @pasoc30?
  • 您是否可以将 minimumPrice 作为字符串插入? MongoDB can't sort by numbers stored as strings.
  • 猫鼬 5.9.6。我正在使用地图集作为数据库。
  • 不,我检查了三倍。数据类型为 int32
猜你喜欢
  • 2019-09-16
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 2016-11-18
  • 2015-10-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多