我面临以下问题:
我在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();
});
});
答案 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;
};
});