提前感谢您的帮助。
我的问题本质上是将数据添加到特定的子文档中。
我的NodeJS服务器中有以下模型:
模型
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const dataSchema = new Schema({
time: Date,
value: String
});
const nodeSchema = new Schema({
name: String,
description: String,
number: Number,
status: String,
lastSeen: Date,
data: [dataSchema]
});
const siteSchema = new Schema({
code: String,
name: String,
description: String,
totalNodes: Number,
nodes: [nodeSchema]
});
const Site = mongoose.model('site',siteSchema);
module.exports = Site;
基本上是这样的:
示例
{
"_id": "5fa169473a394829bc485069",
"code": "xfx3090",
"name": "Name of this site",
"description": "Some description",
"totalNodes": 2,
"__v": 0,
"nodes": [
{
"_id": "5fa1af361e085b516066d7e2",
"name": "device name",
"description": "device description",
"number": 1,
"status": "Offline",
"lastSeen": "2020-11-03T19:27:50.062Z",
"data": [
{
"Date": "2019-01-01T00:00:00.000Z",
"value": "12"
},
{
"Date": "2019-01-01T00:00:00.000Z",
"Value": "146"
}
]
},
{
"_id": "5fa1b10f4f24051520f85a58",
"name": "device name",
"description": "device description",
"number": 2,
"status": "Offline",
"lastSeen": "2020-11-03T19:35:43.409Z",
"data": [
{
"Date": "2019-01-01T00:00:00.000Z",
"Value": "555"
}
]
}
]
}
]
正如您所看到的,我已经用一些随机数据创建了两个虚拟节点。
我现在的问题是,假设我想向节点1添加一些数据。这个代码看起来怎么样?
我尝试了很多变化,尝试了很多不同的事情,但没有任何运气。我知道使用对象Id会更容易,但我希望有办法解决这个问题。
到目前为止,我的最佳结果是使用了这段代码,但不幸的是,它没有添加任何数据。
addNodeData: async (req,res,next) => {
const {siteCode} = xfx3090; //req.params
const { nodeNumber } = 1; //req. params - just to show example
const nodeData = await Site.findOneAndUpdate({'code': siteCode, 'node.number': nodeNumber}, {$push: {'data':{'time': Date.now(), 'value':1223}}});
res.status(200).json({message:'success'});
}
提前谢谢!
您需要位置运算符$
。
你想要的查询是这样的:
db.collection.update({
"_id": "5fa169473a394829bc485069",
"nodes._id": "5fa1af361e085b516066d7e2"
},
{
"$push": {
"nodes.$.data": {
"Date": "newDate",
"value": "newValue"
}
}
})
第一部分是查找文档。我假设nodes._id
不是唯一的,所以我也匹配_id
。
然后,使用文档中要添加新数据的指针,将$push
使用到nodes.$.data
中。因此,在文件data
中将有一个新的对象。
这里是一个混杂的例子