登录
注册
node.js 学习社区
nodejs中mongodb数据库循环查询的问题

cxlxl

2019-09-17 16:45


var mongoose = require('mongoose'); 

require('../../models/new');

var New= mongoose.model('New'); var async = require('async'); const data0 = ['北京', '天津', '上海', '重庆', '河北', '河南', '云南'] exports.mapdata = function (req, res) { try { // start(req, res) run(req, res) } catch (e) { res.status(402).json({ "function error": e.message }) } } function run(req, res) { let mapdata = {} const list = [] async.mapSeries(data0, function (item, callback) { // console.log('1.3 enter: ' + item); setTimeout(function () { // console.log('1.3 handle: ' + item); New.find({ 'properties.地区': item, 'properties.类型': '娱乐新闻' }).count() .then(function (values1) { New.find({ 'properties.地区': item, 'properties.类型': '实时新闻' }).count() .then(function (values2) { mapdata ['name'] = item mapdata ['value1'] = values1 mapdata ['value2'] = values2 mapdata ['value'] = values1 + values2 list.push(mapdata ) console.log(list) callback(null, list); }) console.log(list) }) console.log(list) }, 0); }, function (err, results) { // console.log('1.3 err: ', err); // console.log('1.3 results: ', results); }); }


以上为文件中的代码,使用nodejs+express,数据库使用mongodb 

现在需要循环查询然后返回给前端,但是出来的结果基本上是数组中的最后一个地区 

如下:


新手小白一个,求请教

回复 · 6

  • setTimeout 别乱用,去掉setTimeout 应该就可以了,其他语法和逻辑没问题。

    0

  • @眉间雀 受教了,十分感谢!还想请问一个问题,如果data0中放入了全国的省份,再次进行循环查询,时间就会很长。有什么办法可以减少响应时长么?

    0

  • @cxlxl 把所有省份都放到一条查询语句了,用mongodb 的or 查询条件把名字都加上

    0

  • @眉间雀 抱歉,没太明白您的意思?目前是所有省份放到一个列表,然后循环遍历这个列表,用find一个一个省份去查询前端需要的数据;您的意思是用or一下查询出来么?

    0

  • @cxlxl

    New.find( { $or: [ {name: '北京'}, {name: '天津'}, {name: '河北'} …………] })

    0

  • @眉间雀 啊,是我对mongo的条件查询不够了解。最近恶补了一下mongo的官方知识,您说的解决方法是正确的。真的是万分感谢

    1

发表回复

你可以在回复中 @ 其他人