gpt4 book ai didi

node.js - 从多个集合 MongoDB 创建 View

转载 作者:可可西里 更新时间:2023-11-01 10:45:16 26 4
gpt4 key购买 nike

我有一个医疗保健项目的以下 Mongo 模式(被截断以隐藏项目敏感信息)。

let PatientSchema = mongoose.Schema({_id:String})
let PrescriptionSchema = mongoose.Schema({_id:String, patient: { type: Number, ref: 'Patient', createdAt:Date }})
let ReportSchema = mongoose.Schema({_id:String, patient: { type: Number, ref: 'Patient', createdAt:Date }})
let EventsSchema = mongoose.Schema({_id:String, patient: { type: Number, ref: 'Patient', createdAt:Date }})

有一个名为 Health history 的移动和网络应用程序的 ui 屏幕,我需要在其中对基于 createAt 排序的处方、报告和事件的条目进行分页。所以我正在构建一个 REST 端点来获取这些异构数据。我如何实现这一点。是否可以从多个模式模型创建一个“ View ”,这样我就不会加载所有 3 个模式的内容来获取一页条目。我的“ View ”的架构应如下所示,以便我可以对其运行其他查询(例如查找上一份报告)

{recordType:String,/* prescription/report/event */, createdDate:Date, data:Object/* content from any of the 3 tables*/}

最佳答案

我可以想到三种方法来做到这一点。

恕我直言,实现这一目标的最简单方法是使用类似这样的聚合:

db.Patients.aggregate([
{$match : {_id: <somePatientId>},
{
$lookup:
{
from: Prescription, // replicate this for Report and Event,
localField: _id,
foreignField: patient,
as: prescriptions // or reports or events,
}
},
{ $unwind: prescriptions }, // or reports or events
{ $sort:{ $createDate : -1}},
{ $skip: <positive integer> },
{ $limit: <positive integer> },
])

您必须进一步调整它,才能获得正确的 createdDate。为此,您可能需要查看 $replaceRoot 运算符。

第二个选项是创建一个新的“元”集合,其中包含您的实际事件列表,但仅包含对您的患者以及使用 refPath 的实际事件的引用。处理三种不同的事件类型。这个解决方案是最优雅的,因为它使查询数据的方式更容易,而且可能性能更高。尽管如此,它仍然需要您创建和处理另一个集合,这就是为什么我不想推荐它作为主要解决方案的原因,因为我不知道您是否可以创建一个新集合。

作为最后一个选项,您可以创建 virtual populate fields在 Patient 中,它会自动获取所有处方、报告和事件。这样做的缺点是您无法真正正确地排序和分页...

关于node.js - 从多个集合 MongoDB 创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com