首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB/NodeJS:通过查询参数循环

MongoDB/NodeJS:通过查询参数循环
EN

Stack Overflow用户
提问于 2017-12-01 09:38:41
回答 1查看 109关注 0票数 1

我再次需要您的帮助,因为在querying through various Collections之后(感谢@S.D.您的帮助!),我想循环查询的参数,这变得非常令人沮丧,因为,再次,我不知道发生了什么……

我有这样的代码:

代码语言:javascript
复制
var mongodb = require("mongodb");
let pairs = ["ETH/EUR", "BTC/EUR", "LTC/EUR", "BCH/EUR"];

mongodb.connect("mongodb://localhost:27017/orderInfo", function(err, db) {
  if (err) {
    throw err;
  }

  db.listCollections().toArray((err, cols) => {
    if (err) {
      throw err;
    }

    cols.forEach(col => {
      pairs.forEach(p => {
        db
          .collection(col.name)
          .findOne({ pair: "BTC/EUR" }, {}, function(err, docs) {
            if (err) {
              throw err;
            }
            console.log(col.name + "[OK]: " + docs.pair);
          });
      });
    });
  });
});

这似乎很有效:

代码语言:javascript
复制
Gatecoinorder[OK]: BTC/EUR
Gatecoinorder[OK]: BTC/EUR
Gatecoinorder[OK]: BTC/EUR
Gatecoinorder[OK]: BTC/EUR
Coinmateorder[OK]: BTC/EUR
Coinmateorder[OK]: BTC/EUR
Coinmateorder[OK]: BTC/EUR
Krakenorder[OK]: BTC/EUR
Krakenorder[OK]: BTC/EUR
Coinmateorder[OK]: BTC/EUR
Krakenorder[OK]: BTC/EUR
Quoineorder[OK]: BTC/EUR
Cexorder[OK]: BTC/EUR
Livecoinorder[OK]: BTC/EUR
Gdaxorder[OK]: BTC/EUR
Virwoxorder[OK]: BTC/EUR
Bl3porder[OK]: BTC/EUR
Bitlishorder[OK]: BTC/EUR
Paymiumorder[OK]: BTC/EUR
Coinfloororder[OK]: BTC/EUR
Lakebtcorder[OK]: BTC/EUR
Anxproorder[OK]: BTC/EUR
Bitbayorder[OK]: BTC/EUR
Fybseorder[OK]: BTC/EUR
Itbitorder[OK]: BTC/EUR
_1btcxeorder[OK]: BTC/EUR
Fybsgorder[OK]: BTC/EUR
Dsxorder[OK]: BTC/EUR
Vaultoroorder[OK]: BTC/EUR
Krakenorder[OK]: BTC/EUR
Bitstamporder[OK]: BTC/EUR
Cexorder[OK]: BTC/EUR
Livecoinorder[OK]: BTC/EUR
Gdaxorder[OK]: BTC/EUR
Therockorder[OK]: BTC/EUR
Bl3porder[OK]: BTC/EUR
Bitlishorder[OK]: BTC/EUR
Paymiumorder[OK]: BTC/EUR
Wexorder[OK]: BTC/EUR
Lakebtcorder[OK]: BTC/EUR
Anxproorder[OK]: BTC/EUR
Bitbayorder[OK]: BTC/EUR
Exmoorder[OK]: BTC/EUR
Itbitorder[OK]: BTC/EUR
_1btcxeorder[OK]: BTC/EUR
Fybsgorder[OK]: BTC/EUR
Coinsecureorder[OK]: BTC/EUR
Vaultoroorder[OK]: BTC/EUR
Bitstamporder[OK]: BTC/EUR
Quoineorder[OK]: BTC/EUR
Livecoinorder[OK]: BTC/EUR
Gdaxorder[OK]: BTC/EUR
Therockorder[OK]: BTC/EUR
Virwoxorder[OK]: BTC/EUR
Bitlishorder[OK]: BTC/EUR
Paymiumorder[OK]: BTC/EUR
Wexorder[OK]: BTC/EUR
Coinfloororder[OK]: BTC/EUR
Anxproorder[OK]: BTC/EUR
Bitbayorder[OK]: BTC/EUR
Exmoorder[OK]: BTC/EUR
Fybseorder[OK]: BTC/EUR
_1btcxeorder[OK]: BTC/EUR
Fybsgorder[OK]: BTC/EUR
Coinsecureorder[OK]: BTC/EUR
Dsxorder[OK]: BTC/EUR
Bitstamporder[OK]: BTC/EUR
Quoineorder[OK]: BTC/EUR
Cexorder[OK]: BTC/EUR
Livecoinorder[OK]: BTC/EUR
Therockorder[OK]: BTC/EUR
Virwoxorder[OK]: BTC/EUR
Bl3porder[OK]: BTC/EUR
Bitlishorder[OK]: BTC/EUR
Wexorder[OK]: BTC/EUR
Coinfloororder[OK]: BTC/EUR
Lakebtcorder[OK]: BTC/EUR
Anxproorder[OK]: BTC/EUR
Exmoorder[OK]: BTC/EUR
Fybseorder[OK]: BTC/EUR
Itbitorder[OK]: BTC/EUR
_1btcxeorder[OK]: BTC/EUR
Coinsecureorder[OK]: BTC/EUR
Dsxorder[OK]: BTC/EUR
Vaultoroorder[OK]: BTC/EUR
Bitstamporder[OK]: BTC/EUR
Quoineorder[OK]: BTC/EUR
Cexorder[OK]: BTC/EUR
Gdaxorder[OK]: BTC/EUR
Therockorder[OK]: BTC/EUR
Virwoxorder[OK]: BTC/EUR
Bl3porder[OK]: BTC/EUR
Paymiumorder[OK]: BTC/EUR
Wexorder[OK]: BTC/EUR
Coinfloororder[OK]: BTC/EUR
Lakebtcorder[OK]: BTC/EUR
Bitbayorder[OK]: BTC/EUR
Exmoorder[OK]: BTC/EUR
Fybseorder[OK]: BTC/EUR
Itbitorder[OK]: BTC/EUR
Fybsgorder[OK]: BTC/EUR
Coinsecureorder[OK]: BTC/EUR
Dsxorder[OK]: BTC/EUR
Vaultoroorder[OK]: BTC/EUR

我可以看到,查询实际上是遍历数组的每一项,然后返回BTC/EUR的查询。但是,当我将参数pair: "BTC/EUR"更改为"p"时:

代码语言:javascript
复制
var mongodb = require("mongodb");
let pairs = ["ETH/EUR", "BTC/EUR", "LTC/EUR", "BCH/EUR"];

mongodb.connect("mongodb://localhost:27017/orderInfo", function(err, db) {
  if (err) {
    throw err;
  }

  db.listCollections().toArray((err, cols) => {
    if (err) {
      throw err;
    }

    cols.forEach(col => {
      pairs.forEach(p => {
        db.collection(col.name).findOne({ pair: p }, {}, function(err, docs) {
          if (err) {
            throw err;
          }
          console.log(col.name + "[OK]: " + docs.pair);
        });
      });
    });
  });
});

我得到以下信息:

代码语言:javascript
复制
Gatecoinorder[OK]: ETH/EUR
Gatecoinorder[OK]: BTC/EUR
/Users/ardzii/Documents/NodeJS/Invest-Fund-Crypto/node_modules/mongodb/lib/utils.js:123
    process.nextTick(function() { throw err; });
                                  ^

TypeError: Cannot read property 'pair' of null

显然,该查询适用于ETH/EUR和BTC/EUR用于Gatecoinorder,但我猜由于Gatecoinorder没有LTC/EUR或BCH/EUR文档,所以循环只是停止。我不知道它为什么会停止,我的意思是,即使Gatecoinorder集合没有LTC和BCH文档,它也不应该停在那里,对吗?错误表示属性‘对’为null,这意味着不存在Collection?我尝试在循环中添加和if (col),但没有帮助:

代码语言:javascript
复制
var mongodb = require("mongodb");
let pairs = ["ETH/EUR", "BTC/EUR", "LTC/EUR", "BCH/EUR"];

mongodb.connect("mongodb://localhost:27017/orderInfo", function(err, db) {
  if (err) {
    throw err;
  }

  db.listCollections().toArray((err, cols) => {
    if (err) {
      throw err;
    }

    cols.forEach(col => {
      pairs.forEach(p => {
        if (col)
          db.collection(col.name).findOne({ pair: p }, {}, function(err, docs) {
            if (err) {
              throw err;
            }
            console.log(col.name + "[OK]: " + docs.pair);
          });
      });
    });
  });
});

如何避免此错误?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-01 09:52:22

这是因为您可能没有一些指定对的文档。你得处理好

代码语言:javascript
复制
var mongodb = require("mongodb");
let pairs = ["ETH/EUR", "BTC/EUR", "LTC/EUR", "BCH/EUR"];

mongodb.connect("mongodb://localhost:27017/orderInfo", function(err, db) {
  if (err) {
    throw err;
  }

  db.listCollections().toArray((err, cols) => {
    if (err) {
      throw err;
    }

    cols.forEach(col => {
      pairs.forEach(p => {
        if (col)
          db.collection(col.name).findOne({ pair: p }, {}, function(err, docs) {
            if (err) {
              throw err;
            }
            if(docs && docs.pair)
              console.log(col.name + "[OK]: " + docs.pair);
            else
              console.log(col.name + "[NOTOK]: No pair ");
          });
      });
    });
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47590469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档