从 JSON 对象数组中的字段中提取值
Extract values from fields in an array of JSON objects
我在 MongoDB 中有一个集合,其中包含许多具有相同结构的文档。
当我使用以下代码对集合执行查找查询时:
Comment.find(
{
"data.time.s": {
"$gte": "2019-05-13",
"$lte": "2019-05-27"
}
},
{
"data.iaqi.co.v": "$data.iaqi.co.v",
"data.time.s": "$data.time.s",
"_id": 0
}, function (error, datos) {
console.log(datos)
});
当我 console.log(datos):
时,我得到以下输出
[
{
"data" : {
"iaqi" : {
"co" : {
"v" : 3.2
}
},
"time" : {
"s" : "2019-05-14 12:00:00"
}
}
},
{
"data" : {
"iaqi" : {
"co" : {
"v" : 4.7
}
},
"time" : {
"s" : "2019-05-15 00:00:00"
}
}
}
]
该数组包含 2 个以上的对象,但出于示例的目的,我只放置了其中的 2 个。
数组中的所有对象都具有相同的结构,只是 "v" 和 "s"[=41 的值=] 改变每个对象。
我只需要从每个对象中提取字段"v"和"s"的值并保存它们保存在 CSV 文件中,格式如下:
Date,Value
2019-05-14 12:00:00,3.2
2019-05-15 00:00:00,4.7
2019-05-17 05:00:00,1
2019-05-19 20:00:00,2.3
2019-05-28 08:00:00,33.4
2019-05-28 10:00:00,18.8
2019-05-28 12:00:00,11.5
2019-05-28 13:00:00,12.4
2019-05-29 06:00:00,6.4
现在我正在做一些测试,首先尝试使用 for 循环在控制台中显示数组中提到的值(而不是第一个代码中的 console.log(datos)):
for (var i = 0; i < datos.length; i++) {
console.log(datos[i]['data'['time'['s']]]);
}
但我在控制台中得到以下输出:
undefined
undefined
显然我的语法不正确,但我不知道问题在哪里。
访问数组并获取所需值的确切语法是什么?
非常感谢所有能对此有所启发的人。
你离这里很近了。试试这个语法。不要嵌套这些项目,而是像这样将它们分开:
for (var i = 0; i < datos.length; i++) {
console.log(datos[i]['data']['time']['s']);
}
您也可以使用点符号来查找您要查找的内容:
for (var i = 0; i < datos.length; i++) {
console.log(datos[i].data.time.s);
}
fiddle: https://jsfiddle.net/gn7kyhuz/
var datos = [
{
"data" : {
"iaqi" : {
"co" : {
"v" : 3.2
}
},
"time" : {
"s" : "2019-05-14 12:00:00"
}
}
},
{
"data" : {
"iaqi" : {
"co" : {
"v" : 4.7
}
},
"time" : {
"s" : "2019-05-15 00:00:00"
}
}
}
];
for (var i = 0; i < datos.length; i++) {
console.log(datos[i]['data']['time']['s']);
}
我在 MongoDB 中有一个集合,其中包含许多具有相同结构的文档。
当我使用以下代码对集合执行查找查询时:
Comment.find(
{
"data.time.s": {
"$gte": "2019-05-13",
"$lte": "2019-05-27"
}
},
{
"data.iaqi.co.v": "$data.iaqi.co.v",
"data.time.s": "$data.time.s",
"_id": 0
}, function (error, datos) {
console.log(datos)
});
当我 console.log(datos):
时,我得到以下输出[
{
"data" : {
"iaqi" : {
"co" : {
"v" : 3.2
}
},
"time" : {
"s" : "2019-05-14 12:00:00"
}
}
},
{
"data" : {
"iaqi" : {
"co" : {
"v" : 4.7
}
},
"time" : {
"s" : "2019-05-15 00:00:00"
}
}
}
]
该数组包含 2 个以上的对象,但出于示例的目的,我只放置了其中的 2 个。
数组中的所有对象都具有相同的结构,只是 "v" 和 "s"[=41 的值=] 改变每个对象。
我只需要从每个对象中提取字段"v"和"s"的值并保存它们保存在 CSV 文件中,格式如下:
Date,Value
2019-05-14 12:00:00,3.2
2019-05-15 00:00:00,4.7
2019-05-17 05:00:00,1
2019-05-19 20:00:00,2.3
2019-05-28 08:00:00,33.4
2019-05-28 10:00:00,18.8
2019-05-28 12:00:00,11.5
2019-05-28 13:00:00,12.4
2019-05-29 06:00:00,6.4
现在我正在做一些测试,首先尝试使用 for 循环在控制台中显示数组中提到的值(而不是第一个代码中的 console.log(datos)):
for (var i = 0; i < datos.length; i++) {
console.log(datos[i]['data'['time'['s']]]);
}
但我在控制台中得到以下输出:
undefined
undefined
显然我的语法不正确,但我不知道问题在哪里。
访问数组并获取所需值的确切语法是什么?
非常感谢所有能对此有所启发的人。
你离这里很近了。试试这个语法。不要嵌套这些项目,而是像这样将它们分开:
for (var i = 0; i < datos.length; i++) {
console.log(datos[i]['data']['time']['s']);
}
您也可以使用点符号来查找您要查找的内容:
for (var i = 0; i < datos.length; i++) {
console.log(datos[i].data.time.s);
}
fiddle: https://jsfiddle.net/gn7kyhuz/
var datos = [
{
"data" : {
"iaqi" : {
"co" : {
"v" : 3.2
}
},
"time" : {
"s" : "2019-05-14 12:00:00"
}
}
},
{
"data" : {
"iaqi" : {
"co" : {
"v" : 4.7
}
},
"time" : {
"s" : "2019-05-15 00:00:00"
}
}
}
];
for (var i = 0; i < datos.length; i++) {
console.log(datos[i]['data']['time']['s']);
}