node.js - Node.JS/Express - 如何避免多个数据库查询
问题描述
我有一个基本的 express 应用程序,我开始使用 db 查询,我想知道如何避免多个 db 查询,因为我认为它的效率不高:
app.get('/:word', function(req,res){
db.create({'name': word});
console.log('the word is ' + word);
});
我想做的是:
- 从 url 中获取单词
- 检查它是否存在于 datbaase 中(或以前请求过,因为如果是,那么它可能已经通过这个基本代码添加了)
- 如果它不存在,则添加它,然后继续执行 console.log
我只想将每个单词添加到我的数据库中一次,而不是一次又一次地运行 db 查询。
这就是我的想法:
在插入之前检查它是否存在的不是那么有效的方式查询
好方法,但我不知道如何从这里开始缓存正在查询的单词并维护缓存以防止数据库查询
更多信息编辑
我通过 mongoose 使用 mongodb 'word' 键已经是唯一的,所以我知道它不会创建重复值
如果该值或该 url 已经被命中一次,我不想运行任何数据库查询
解决方案
在 mongo db 中,您可以使用带有可选标志 upsert: true文档的 findOneAndUpdate
为了确保每个单词只出现一次,您还应该在该字段上设置唯一索引。但是请记住,唯一索引区分大小写,因此 Cat 和 cat 是不同的词。
推荐阅读
- java - 使用场景构建器在窗口上设置关闭请求方法
- ffmpeg - 连接多个具有效果的 mp4 文件
- javascript - 当传递给组件状态时,`this.props` 是否总是返回一个真实值?
- vba - 通过网站获取当前日期/时间
- python - python基于emp_id比较两个类对象的实例面临困难
- javascript - 库 MPDF (PHP):转换 svg 的问题
- mysql - Laravel 队列守护进程不断使用 DB 处理器(supervisord)
- javascript - 如何粘贴文本 document.execCommand("Paste") 不起作用
- java - java.lang.AssertionError:响应状态错误预期:200 实际:400
- python-3.x - Azure + gunicorn + flask + Azure Web App Linux:ModuleNotFoundError:没有名为“flaskr”的模块