node.js – 我应该在Mongoose中逐个返回一个数组或数据

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

《node.js – 我应该在Mongoose中逐个返回一个数组或数据》

《node.js – 我应该在Mongoose中逐个返回一个数组或数据》

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

《node.js – 我应该在Mongoose中逐个返回一个数组或数据》

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

>一次获取所有数据并将其呈现给用户 – 这是一个数组
>使用下一个问题逐个获取数据作为用户进度 – 每个调用一个数据

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一次获取并且可能慢于进行网络请求不会很慢

2号方法的问题,我无法想象如何做到这一点,因为每个问题都是独立的并且触发下一个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
});

最佳答案 我会使用Dave的方法,但我会在这里详细介绍一下.

在您的应用中,创建一个包含问题的数组.然后还存储一个用户当前所在问题的值,例如将其称为索引.然后,您有以下伪代码:

index = 0
questions = []

现在你有了这个,一旦用户启动应用程序,加载10个问题(参见Dave的答案,使用MongoDB的跳过和限制),然后将它们添加到数组中.向您的用户提供问题[索引].一旦索引达到8(=第9个问题),通过API加载10个问题,并将它们添加到数组中.这样,您将始终可以为用户提供问题.

点赞