node.js - mongoose 可以在一次查询中返回文档或仅返回其中一个字段吗?
问题描述
我有一个猫鼬模式,其中包含一组文档,这些文档被渲染为 SVG 的视觉表示。
目前,在客户端从服务器请求文档之后,渲染发生在客户端使用 D3。
由于数据本质上是一个快照,它是不可变的,服务器端渲染将节省客户端的大量时间和资源。
有没有办法将渲染存储在 MongoDB 中,以便我可以使用一个查询将未渲染的文档或其渲染返回给客户端,但不能同时返回两者?根据客户端收到的数据,它可以决定渲染它,还是简单地将渲染插入 HTML DOM?
另一种方法是查询渲染,如果没有结果,渲染、存储它,然后将渲染传递给客户端?
第二种选择可能是向文档引入一个状态,其中转换到“已发布”状态将触发要存储的渲染,并且(匿名)客户端只能查询已发布的文档?
蒂亚!
更新:根据要求添加示例。
假设 Mongoose 模式如下(为了清楚起见,缩写):
const exampleSchema = new mongoose.Schema({
year: Number,
release: String,
name: String,
rendering: String // this is the field to hold the rendered version
})
待渲染的数据主要存储在其他文档中,当渲染发生在 Express 中的业务逻辑函数中时,这些文档会被拉入,然后发送到客户端进行渲染。当没有预渲染可视化时,“rendering”字段应该为空/null(我在客户端的 HTML/CSS 布局中利用 SVG 的缩放功能独立于端点屏幕尺寸)
未渲染的示例将使用 JSEND 格式作为 JSON 消息发送到客户端(为了便于阅读,省略了引号):
{
status: success,
type: raw
data: {
_id: ...
year: 2020
release: A release name
name: Example data
}
}
但是,如果存在渲染,则 JSON 消息将如下所示:
{
status: success,
type: svg
data: {
_id: ...
rendering: <svg>...</svg>
}
}
我的目标是让 Mongoose 查询(或 MongoDB)在一个查询中完成此操作,因为每次客户端请求在屏幕上查看相应的渲染时都会执行此操作 - 这将使查询数量减半,从而降低负载数据库。
正如我所说,我愿意接受建议的替代解决方案;有关一些想法,请参阅原始帖子。
解决方案
推荐阅读
- sql - SQL Server - 值通过 ISDATE() 但未能 CAST 为 DATE 或 DATETIME
- java - 如何避免 if else 语句并将它们重写为更小更清晰的代码?
- python - image_url = sys.argv[1] IndexError: 列表索引超出范围
- python - 为什么 python glob.glob 与我传入的通配符不匹配任何文件?
- powershell - 一组数据需要重新排列并导出为 CSV
- javascript - 如何通过 D3 重复和延迟对 API 的调用
- random - 在 Lua 中设置随机种子
- excel - 在 Excel 中使用索引和匹配;为什么命名范围不起作用?
- exception - DAG 从 Web 界面执行 OK,但在通过命令行运行时“失败”
- python - 计算行条目以调整不同的列,Pandas