最终,这取决于您希望通过数据实现什么目标。
为了跟踪所有变化的日志,保留在其各自的数组中,那么bucket pattern将最好地解决您的问题[bucket pattern解释][1]
[1]:https://www.mongodb.com/blog/post/building-with-patterns-the-bucket-pattern
,否则只需普通字段操作即可解决您的问题。
[桶模式]和[字段操作]实现的架构设计如下所示:
如果您打算跟踪所有更改的日志,那么 bucket 模式 是您的最佳选择,您的架构可能如下所示:
const mongoose = require('mongoose')
const { Schema } = mongoose
const numberLogSchema1 = new Schema({
field1: [
{type:Number}
],
field2: [
{type:Number}
],
field3: [
{type:Number}
],
field4: [
{type:Number}
]
})
module.exports = mongoose.model('numberLogs1',numberLogSchema1)
对应的应该是这样的:
router.post('/numberLog', async (req, res) => {
try {
const saveNumberLog = await numberLog1.updateOne(
{ _id: numberCollectionIdhere },
{
$push: {
field1: req.body.fieldLogValue
}
})
res.json(saveNumberLog)
}catch (err) {
res.json({
message: err
})
}
})
否则,如果您只想在前端的特定间隔内使用 javascript 计时器 操作字段值,该计时器也可以保存到数据库并在页面重新加载时获取,您的架构可能看起来像这样:
const mongoose = require('mongoose')
const { Schema } = mongoose
const numberLogSchema2 = new Schema({
field1: {
type: Number,
required: true,
default: 0
},
field2: {
type: Number,
required: true,
default: 0
},
field3: {
type: Number,
required: true,
default: 0
},
field4: {
type: Number,
required: true,
default: 0
}
})
module.exports = mongoose.model('numberLogs2',numberLogSchema2)
及其对应的路由路径,可能如下所示:
//if you intend to just increase the logvalue hourly
//without keeping track of it previous value then we use $inc
router.post('/numberLog2', async (req, res) => {
try {
const saveNumberLog2 = await numberLog2.updateOne(
{ _id: numberCollectionIdhere },
{
$inc: {
field1: req.body.fieldLogValue
}
})
res.json(saveNumberLog2)
}catch (err) {
res.json({
message: err
})
}
})