我有一个父子架构,如下所示:
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/