【发布时间】:2018-08-18 14:59:34
【问题描述】:
我有一个程序,我从服务器请求天气数据,处理数据,然后使用 mongoose 将其保存到 mlab 帐户。我正在收集 10 年的数据,但我从中请求数据的 API 一次只允许请求大约一年。
我正在使用 findOndAndUpdate 为每个气象站创建/更新文档,但在更新数据对象中的数组时遇到了问题。 (可能不是最好的描述方式……)
例如,这是模型:
const stnDataSchema = new Schema(
{
station: { type: String, default: null },
elevation: { type: String, default: null },
timeZone: { type: String, default: null },
dates: {},
data: {}
},
{ collection: 'stndata' },
{ runSettersOnQuery: true }
)
日期对象如下所示:
dates: ["2007-01-01",
"2007-01-02",
"2007-01-03",
"2007-01-04",
"2007-01-05",
"2007-01-06",
"2007-01-07",
"2007-01-08",
"2007-01-09"]
和这样的数据对象:
"data": [
{
"maxT": [
0,
null,
4.4,
0,
-2.7,
etc.....
我想要发生的是,当我运行 findOneAndUpdate 时,我想根据站点查找文档,然后将新的 maxT 值和日期附加到相应的数组中。我让它适用于日期数组,但是由于我更新的元素是嵌套的,因此数据数组遇到了麻烦。 我试过这个:
const update = {
$set: {'station': station, 'elevation': elevation, 'timeZone': timeZone},
$push: {'dates': datesTest, 'data.0.maxT': testMaxT}};
StnData.findOneAndUpdate( query, update, {upsert: true} ,
function(err, doc) {
if (err) {
console.log("error in updateStation", err)
throw new Error('error in updateStation')
}
else {
console.log('saved')
但是得到了这样的输出到 mlab:
"data": {
"0": {
"maxT": [
"a",
"b",
问题是我得到一个“0”而不是一个元素的数组。我尝试了'data [0] .maxT',但是当我这样做时没有任何反应。
问题是我第一次为一个站运行数据时,我想在我的第三个代码块中创建一个具有格式数据对象的新文档,然后在后续运行中,一旦该文档已经存在,更新具有新值的 maxT 数组。有什么想法吗?
【问题讨论】:
标签: javascript node.js mongoose mlab