如何在 Mongoose 中将任何数字指定为有效的 属性 键?
How to specify any number as a valid property key in Mongoose?
我想将传感器数据存储在 MongoDB 中,比如说以 1hz 的频率。为了有效地做到这一点,我想按照 this article recommends 的方式来做,即将多个数据点存储在同一个文档中,使用经过的秒数作为对象属性。
这是我希望典型文档的外观:
const record = {
startingHour: 'Sun Sep 11 2016 03:00:00', // Date object
values: {
0: { // minute
0: { lat: 52.0001, lon: 13.0001 },
// ... all other seconds
59: { lat: 52.9999, lon: 13.9999 }
},
// ... all other minutes
59: {
0: { lat: 53.0001, lon: 14.0001 },
// ...
59: { lat: 53.9999, lon: 14.9999 }
}
}
}
我如何在 Mongoose 中指定我希望每个文档 t 代表一个具有 60 个属性的小时,每个键是从 1 到 59 的数字 - 每分钟一个 - 而这些属性中的每一个依次具有 60 个属性, 和 那些 记录来表示实际位置值?
所以要保存新记录,我会做 record.values.59.59 = { lat: 53.9999, lon: 14.9999 }
如何在 Mongoose 中表示这种模式?
我设法通过创建函数来生成我想要的对象来做到这一点。然后我将这些生成的对象用作模式,将一个对象嵌入另一个对象并将它们放入最终模式中:
/**
* Functions to generate objects for Minutes and Seconds
* Each object containing 60 keys, going from 0 to 59
*/
function second() {
let obj = {};
for (var i = 0; i < 60; i++) {
obj[i] = Location;
}
return obj;
}
function minute() {
let obj = {};
for (var i = 0; i < 60; i++) {
obj[i] = Second;
}
return obj;
}
const Location = new Schema({
latitude: { type: Number, required: true },
longitude: { type: Number, required: true }
});
// Instantiates Second and Minute objects as schemas
const Second = new Schema(second());
const Minute = new Schema(minute());
// Actual schema
const RecordSchema = new Schema({
startingHour: {
type: Date,
required: true
},
values: {
type: Minute
}
});
这让我可以保存如下对象:
{
startingHour: new Date(),
values: {
0: {
0: {
location: { latitude: 0.03, longitude: 51.7 }
},
1: {
location: { latitude: 0.03, longitude: 51.7 }
}
// ...
},
// ...
59: {
// ...
59: {
location: { latitude: 0.03, longitude: 51.7 }
}
}
}
}
我想将传感器数据存储在 MongoDB 中,比如说以 1hz 的频率。为了有效地做到这一点,我想按照 this article recommends 的方式来做,即将多个数据点存储在同一个文档中,使用经过的秒数作为对象属性。
这是我希望典型文档的外观:
const record = {
startingHour: 'Sun Sep 11 2016 03:00:00', // Date object
values: {
0: { // minute
0: { lat: 52.0001, lon: 13.0001 },
// ... all other seconds
59: { lat: 52.9999, lon: 13.9999 }
},
// ... all other minutes
59: {
0: { lat: 53.0001, lon: 14.0001 },
// ...
59: { lat: 53.9999, lon: 14.9999 }
}
}
}
我如何在 Mongoose 中指定我希望每个文档 t 代表一个具有 60 个属性的小时,每个键是从 1 到 59 的数字 - 每分钟一个 - 而这些属性中的每一个依次具有 60 个属性, 和 那些 记录来表示实际位置值?
所以要保存新记录,我会做 record.values.59.59 = { lat: 53.9999, lon: 14.9999 }
如何在 Mongoose 中表示这种模式?
我设法通过创建函数来生成我想要的对象来做到这一点。然后我将这些生成的对象用作模式,将一个对象嵌入另一个对象并将它们放入最终模式中:
/**
* Functions to generate objects for Minutes and Seconds
* Each object containing 60 keys, going from 0 to 59
*/
function second() {
let obj = {};
for (var i = 0; i < 60; i++) {
obj[i] = Location;
}
return obj;
}
function minute() {
let obj = {};
for (var i = 0; i < 60; i++) {
obj[i] = Second;
}
return obj;
}
const Location = new Schema({
latitude: { type: Number, required: true },
longitude: { type: Number, required: true }
});
// Instantiates Second and Minute objects as schemas
const Second = new Schema(second());
const Minute = new Schema(minute());
// Actual schema
const RecordSchema = new Schema({
startingHour: {
type: Date,
required: true
},
values: {
type: Minute
}
});
这让我可以保存如下对象:
{
startingHour: new Date(),
values: {
0: {
0: {
location: { latitude: 0.03, longitude: 51.7 }
},
1: {
location: { latitude: 0.03, longitude: 51.7 }
}
// ...
},
// ...
59: {
// ...
59: {
location: { latitude: 0.03, longitude: 51.7 }
}
}
}
}