node.js - Mongoose 按子值排序

标签 node.js mongodb mongoose

我有一个父子架构,如下所示:

schedule = Schema ({
    from: Date,
    to: Date
});

content = Schema ({
    schedule: { type: Schema.ObjectId, ref: "schedule" }
    name: String
});

我的问题是,如何查询 Mongoose 以返回“所有内容,按 schedule.from date 排序”?

最佳答案

您需要在客户端分两步进行排序,或者将要排序的日期字段存储为 content 对象中的嵌入字段。

您正在尝试使用来自两个集合的数据进行集合连接。由于 MongoDB 不支持联接,因此您需要填充 schedule 字段,然后在客户端本地进行排序。如果你的文档非常多,或者想对数据进行分页,这当然不行。

最有效的方法是将日期字段存储在 content 模型中,这样您就可以直接从单个文档和集合中执行排序,而无需连接。虽然这可能会导致您想要的架构设计出现其他问题,但您可能会发现这是最有效的。这种非规范化过程的好处是您可以非常轻松高效地进行排序、过滤等操作(尤其是如果您已经为日期字段编制了索引)。

schedule = Schema ({
    from: Date,
    to: Date
};

content = Schema ({
    schedule: { type: Schema.ObjectId, ref: "schedule" },
    schedule_data: { 
        from: Date,
        to: Date
    },
    name: String
});

如果您希望能够快速定位和更新content 文档(或者如果还有其他较少使用或不需要的排序/过滤)。

关于node.js - Mongoose 按子值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20062895/

相关文章:

node.js - MongoDB Atlas 触发器中的聚合不起作用

node.js - 如何从 Nest.js 连接到 Heroku Postgres?

node.js - 使用 Node.js 的 Typescript 给出 "is not a constructor"错误

MongoDB 查询优化器不断为查询选择效率最低的索引

MongoDB:是否可以默认设置 BsonElement 的大小写?

node.js - promise 似乎没有按正确的顺序调用?

javascript - 使变量可供其他 Node 模块访问

python - Django 和 MongoDB 引擎 - 对象 ID 问题!

javascript - 使用 Mongoose 时出现错误 'Object has no method xxx '

node.js - 从 Mongoose 3.x 升级到 Mongoose 4.x 时如何在模式中使用模式?