在猫鼬中排序
Posted
技术标签:
【中文标题】在猫鼬中排序【英文标题】: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 【参考方案1】:请参阅here 了解有关排序和 here 是关于 mongoose async/await 的一些不错的官方文档
您应该使用 .exec()
和 await 以获得更好的堆栈跟踪,排序可以采用以下值:asc
、desc
、ascending
、descending
、1
和 -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以上是关于在猫鼬中排序的主要内容,如果未能解决你的问题,请参考以下文章