Node.js Mongoose NodeJS Express-如何将数据推送到特定的子文档对象数组
提前感谢您的帮助 我的问题本质上是向特定的子文档添加数据 我的NodeJS服务器中有以下型号: 模型 基本上是这样的: 例子 如您所见,我创建了两个带有一些随机数据的虚拟节点 我现在的问题是,假设我想向节点1添加一些数据。这段代码看起来怎么样 我尝试过许多变化,尝试过许多不同的事情,但没有任何运气。我知道使用对象Id会更容易,但我希望有办法解决这个问题 到目前为止,我最好的结果是使用这段代码,但不幸的是,它没有添加任何数据Node.js Mongoose NodeJS Express-如何将数据推送到特定的子文档对象数组,node.js,json,mongodb,express,mongoose,Node.js,Json,Mongodb,Express,Mongoose,提前感谢您的帮助 我的问题本质上是向特定的子文档添加数据 我的NodeJS服务器中有以下型号: 模型 基本上是这样的: 例子 如您所见,我创建了两个带有一些随机数据的虚拟节点 我现在的问题是,假设我想向节点1添加一些数据。这段代码看起来怎么样 我尝试过许多变化,尝试过许多不同的事情,但没有任何运气。我知道使用对象Id会更容易,但我希望有办法解决这个问题 到目前为止,我最好的结果是使用这段代码,但不幸的是,它没有添加任何数据 addNodeData: async (req,res,next) =&
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”,
“节点id”:“5fa1af361e085b516066d7e2”
},
{
“$push”:{
“节点.$.data”:{
“日期”:“新日期”,
“值”:“新值”
}
}
})
第一部分是查找文档。我假设节点。\u id
不是唯一的,所以我也匹配\u id
然后,使用文档中要添加新数据的指针,使用$push
进入节点。$.data
。因此,在字段data
中将有一个新对象
mongo plauground的一个例子是不错的解决方案。我将添加原型
更新(,)
。看起来该站点的名称也可能是一个很好的过滤器。
{
"_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"
}
]
}
]
}
]
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'});
}