【问题标题】:Sorting on multiple fields in mongodb via mongoose通过 mongoose 对 mongodb 中的多个字段进行排序
【发布时间】:2021-09-04 23:55:26
【问题描述】:

我有一个 userModel,它有大约 5 个字段,当我 find({}) 他们时,我想按升序或降序对它们进行排序。我从文档中读到的所有内容都表明这应该可以工作,但它不起作用。

此查询只为第一个值返回正确的顺序,例如firstName,并为其余的返回未排序的结果。这些是我尝试实现的不同排序技术,它们都返回相同的结果。如果我尝试翻转到 Descending 顺序,则会发生完全相同的行为。

UserModel.find({}).sort({firstName: 'asc', lastName:'asc' ,email:'asc',createdAt:'asc', updatedAt:'asc' })
UserModel.find({}).sort({firstName: 1, lastName:1 ,email:1, createdAt:1 , updatedAt: 1 })
UserModel.find({}).sort("firstName lastName email createdAt updatedAt")
UserModel.find({}).sort("firstName, lastName, email, createdAt, updatedAt")

用户模型

const UserSchema = new mongoose.Schema(
  {
    firstName: {
      type: String,
      required: [true, "Please enter a valid first name."],
    },
    lastName: {
      type: String,
      required: [true, "Please enter a valid last name."],
    },
    email: {
      type: String,
      required: [true, "Please provide a valid email address."],
      unique: true
    },
    dob: {
      type: Date,
      default: null,
    },
)

export default mongoose.models.User || mongoose.model("User", UserSchema)

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    你需要先创建一个索引,然后排序。

    UserModel.createIndex( {firstName: 1, lastName:1 ,email:1, createdAt:1 , updatedAt: 1 })
    

    然后从数据库中获取数据:

    UserModel.find().sort( {firstName: 1, lastName:1 ,email:1, createdAt:1 , updatedAt: 1 } )
    

    更多详情在https://docs.mongodb.com/manual/tutorial/sort-results-with-indexes/

    【讨论】:

    • 有趣!您对如何对多列进行排序有任何想法吗?
    • 是的,你可以通过索引来做,但是你需要先添加它。我最初误解了你的问题
    • 你能告诉我这是怎么做的吗?一个实际的例子什么的。谢谢!
    • 你可以在答案块中看到一个例子
    • 我看过你的回答,我看起来很棒,但我还有 1 个问题。在猫鼬的背景下,我该怎么做?我在哪里调用 users.createIndex 方法。再次感谢
    猜你喜欢
    • 2021-11-01
    • 2017-06-03
    • 2019-03-30
    • 2020-04-13
    • 2023-03-08
    • 2020-11-24
    • 1970-01-01
    • 2019-03-19
    • 2014-10-17
    相关资源
    最近更新 更多