我应该在 Mongoose 中一一返回数组还是数据

2024-04-11

我有一个使用 IOS 创建的简单应用程序,它是一个问卷应用程序,每当用户单击播放时,它都会调用对 node.js/express 服务器的请求

从技术上讲,用户单击答案后,它将转到下一个问题

我很困惑使用哪种方法来获取问题/问题

  1. 一次获取所有数据并将其呈现给用户 - 这是一个数组
  2. 随着用户处理下一个问题,逐一获取数据 - 每次调用一个数据

API示例

// Fetch all the data at once
app.get(‘/api/questions’, (req, res, next) => {
  Question.find({}, (err, questions) => {
    res.json(questions);
  });
});

// Fetch the data one by one
app.get('/api/questions/:id', (req, res, next) => {
  Question.findOne({ _id: req.params.id }, (err, question) => {
   res.json(question);
  });
});

第一种方法的问题是,假设有 200 个问题,那么 mongodb 一次获取会不会很慢,并且可能会很慢进行网络请求

第二种方法的问题是,我无法想象如何做到这一点,因为每个问题都是独立的,触发下一个 api 调用很奇怪,除非问题 mongodb 中有一个计数器或一个级别。

为了清楚起见,这是 Mongoose 中的数据库设计问题

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const QuestionSchema = new Schema({
    question: String,
    choice_1: String,
    choice_2: String,
    choice_3: String,
    choice_4: String,
    answer: String
});

我会使用戴夫的方法,但我会在这里更详细地介绍一下。 在您的应用程序中,创建一个包含问题的数组。然后还存储一个用户当前正在解决的问题的值,称之为index例如。然后您将得到以下伪代码:

index = 0
questions = []

现在您已经有了这个,一旦用户启动应用程序,就加载 10 个问题(请参阅 Dave 的答案,为此使用 MongoDB 的跳过和限制),然后将它们添加到数组中。服务questions [index]给您的用户。一旦索引达到 8(= 第 9 个问题),就通过 API 加载另外 10 个问题,并将它们添加到数组中。这样,您将始终向用户提出问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该在 Mongoose 中一一返回数组还是数据 的相关文章

  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数
  • 如何使用remark将markdown解析为json

    The 备注站点 https remark js org 有一个 AST 浏览器的链接 用于输出备注 https astexplorer net gist 0a92bbf654aca4fdfb3f139254cf0bad ffe102014
  • 无法使用 Nest CLI 创建新项目

    我正在关注this https docs nestjs com first steps创建 Nest 项目的教程 我已经安装了Nest CLI使用这个命令 npm i g nestjs cli 我使用以下命令检查了本地安装的软件包列表 发现
  • Mongod 错误(用自制程序安装)

    我已经安装了 mongodb brew install mongodb 已创建文件夹 mkdir p data db 处理权限 sudo chown R id un data db Run mongod 错误日志 2018 01 06T14
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 使用 Sequelize 实现单表继承

    有没有办法使用sequelize来创建单表继承 我希望有一个用于购买和 PartialPurchase 模型的 STI 其中我将有一个类型字段 该字段为 Purchase 或 PartialPurchase 以及类 Purchasing 和
  • Plesk Windows 部署 Node.js

    我创建了一个以 Node js 作为后端的 Angular 项目 这是服务器文件结构 Home directory httpdocs node hm dist browser folder server folder server js p
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • mongodb 获取最后插入的文档

    此 Meteor 代码尝试查找集合中的最后一个文档 find userId this userId sort createdAt 1 limit 1 但由于所有文档都是按时间顺序排列的 我想删除createdAt字段 所以一旦被 删除 是否
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 在node.js中生成密码重置令牌

    如何在 node js 中生成可在 url 中使用的密码重置令牌 我只需要生成令牌的方法 user reset password token user reset password expire expire date 编辑 这是解决方案
  • 除 .spec.js 之外的每个 .js 文件的节点 glob 模式

    我正在寻找更好的全局模式以供使用 我想找到所有 js文件但排除 spec js文件 到目前为止我有以下解决方案 我目前拥有的解决方案要求我不断添加文件扩展名以排除它们 否则它们会被拾取 例如 html files 我试图让它只寻找 js文件
  • 部署的 Firebase 函数无法对外部 API 执行 HTTP GET? [复制]

    这个问题在这里已经有答案了 我正在尝试创建我的第一个 Google Home Action 其功能与我的 Amazon Alexa Skill 相同 此操作的工作方式是 您执行一个意图 然后调用我的代码中的一个函数 调用该函数时 它会向外部
  • 如何在node.js中的一定时间后强制解决承诺? [复制]

    这个问题在这里已经有答案了 我正在尝试从其 url 下载大量图像 然后在 Node js 中创建一个 PDF 文件 我正在使用图片下载器 https www npmjs com package image downloader模块下载承诺链
  • 打字稿:“找不到模块”且输入有效

    我刚刚使用 typescript 启动了一个新的 Nodejs 项目 我安装了打字 https github com typings typings https github com typings typings 并使用它来安装 Node
  • Node.js 每个用户一个会话

    如何防止我的用户同时从两个设备登录我的系统 因此 如果用户从计算机登录 当他从不同的计算机登录时 首先会自动关闭会话 不需要使其实时 我使用node js express js mongoose passport connect mongo
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o

随机推荐