mongo在nodejs中插入for循环只从数组中插入一个

时间:2016-01-27 15:38:22

标签: node.js mongodb mongoose

我正在构建一个收集实时活动投票的应用程序。

api不允许我们从时间框架中选择用户,所以我每秒都会轮询端点。

我目前有13个从端点返回的条目,我将它们解析为和数组并围绕它们循环设置我的mongoose模式的属性并尝试保存它们,但当我这样做时

db.votes.count()我的结果总是1

我的节点模块看起来像

var express    = require('express');
var unirest = require('unirest');
var voteSchema = require(GLOBAL.rootdir + '/modules/voting/models/votes');

var seconds = 0;
var interval = 1000;

express({
    votePoller : setInterval(function () {
        seconds++;
        if (typeof GLOBAL.accessToken != 'undefined') {

            var Request = unirest.get('https://api.domain.io/api/v1/guests');
            Request
                .header('Accept', 'application/json')
                .header('Content-Type', 'application/json; charset=utf-8')
                .header('Authorization', 'Bearer ' + GLOBAL.accessToken)
                .end(function (response) {

                    if(response.code === 200){
                        var votesModel = new voteSchema;

                        var payloadArray = JSON.parse(response.raw_body);
                        for(var i in payloadArray.guests){
                            console.log(i);
                            console.log(payloadArray.guests[i]);

                            votesModel.ctid = payloadArray.guests[i].id;
                            votesModel.email = payloadArray.guests[i].username;
                            votesModel.voteStatus = 0;
                            votesModel.createdAt = new Date(1000 * payloadArray.guests[i].created_at);

                            votesModel.save(function(err) {
                                if (err) {
                                    console.log(err);
                                    console.log({ message: err });
                                } else {
                                    console.log({ message: 'vote saved' });
                                }
                            });
                            console.log('Done');
                        }
                    }
                });
        }
        console.log(seconds);
    }, interval)
});

var votePoller = express;

module.exports = votePoller;

我的猫鼬模型是

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

var votesSchema = new Schema({
    ctid: { type: String, required: true, unique: true },
    fullName: { type: String},
    email: { type: String, required: true, unique: true },
    mobileNumber: { type: String },
    vote:   { type: Number},
    voteStatus: Boolean,
    createdAt: Date
});

var Votes = mongoose.model('Votes', votesSchema);

module.exports = Votes;

控制台日志计算出数组中的每个i,所以为什么没有触发保存功能让我感到难过

提前致谢

1 个答案:

答案 0 :(得分:0)

你需要使用异步函数来执行async for循环,这里有很多答案。我建议使用像async这样的控制流库,或者如果使用新版本的节点,请使用本机promises。承诺所有方法都是实现这一目标的最佳方式。