mongodb集合用标准获取信息

时间:2017-06-05 20:44:14

标签: node.js mongodb mongodb-query

我面临以下问题:

我在mongoDB的集合中有这些数据

   { Node: '2', Type: 'temperature', Value: '25.9', _id: 5936f90c81c543363d42f598 },
   { Node: '3', Type: 'temperature', Value: '31.0', _id: 5936f90c81c543363d42f599 },
   { Node: '1', Type: 'humidity', Value: '45.2', _id: 5936f90c81c543363d42f59a },
   { Node: '2', Type: 'humidity', Value: '55.3', _id: 5936f90c81c543363d42f59b }

我想按类型获取它。

在我的代码中找不到我做错的事情......

var MongoClient = require('mongodb').MongoClient
  , assert = require('assert');
var url = 'mongodb://localhost:27017/myproject';
MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  if (err) throw err;
  var collection = db.collection('readings');
  collection.find({}).toArray(function(err, result) {
    if (err) throw err;
    //console.log(result); //mostrar os resultados
    var numTemps = 0;
    result.forEach(function(err,doc){
      if ("temperature" in result) {
        numTemps = numTemps + 1;
      };
    });
    var numHums = 0;
    result.forEach(function(err,doc){
      if ("humidity" in result) {
        numHums = numHums + 1;
      };
    });
    console.log("Temps: " + numTemps);
    console.log("Hums: " + numHums);
    db.close();
  });
});

3 个答案:

答案 0 :(得分:1)

我不确定那里发生了什么,但看起来都错了。要获得各种类型的计数,请尝试以下方法:

db.readings.count({temperature: $exists: true}})
db.readings.count({humidity: $exists: true}})

答案 1 :(得分:1)

你有一些错误。

result.forEach(function(err,doc){
      if ("temperature" in result) {
        numTemps = numTemps + 1;
      };
    });
    var numHums = 0;
    result.forEach(function(err,doc){
      if ("humidity" in result) {
        numHums = numHums + 1;
      };
    });

我相信你的意思是:

result.forEach(function(doc){
      if ("temperature" in doc) {
        numTemps = numTemps + 1;
      };
    });
    var numHums = 0;
    result.forEach(function(doc){
      if ("humidity" in doc) {
        numHums = numHums + 1;
      };
    });

或者,具有更好的格式和性能(以及更多DRY):

result.forEach(function(doc){

  if ("temperature" in doc) {
    numTemps++;
  };

  if ("humidity" in doc) {
    numHums++;
  };

});

答案 2 :(得分:-1)

谢谢大家。

通过以下方式管理解决此问题:

collection.find({}).toArray(function(err, result) {
if (err) throw err;
//console.log(result);
var numHums = 0;
var numTemps = 0;
var i = 0;
result.forEach(function(err,values){
  console.log(result[i].Type);
  if (result[i].Type == 'humidity') {
    numHums = numHums + 1;
  }
  if (result[i].Type == 'temperature') {
    numTemps = numTemps + 1;
  };
  i = i + 1;
});
console.log("Temps: " + numTemps);
console.log("Hums: " + numHums);
db.close();
});

编辑:

根据用户的建议改变了foreach:

result.forEach(function(values){ 
 console.log(values.Type); 
 if (values.Type == 'humidity') { 
  numHums = numHums + 1; 
 } 
 if (values.Type == 'temperature') { 
  numTemps = numTemps + 1; 
 }; 
});