Javascript Meteor:更新文档数组中的嵌套对象
我尝试更新文档中的特定对象。在本例中,我想用Javascript Meteor:更新文档数组中的嵌套对象,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我尝试更新文档中的特定对象。在本例中,我想用group.id='fdsfdsfdsfd'和data.id='qqddwsdksfvfscscd'更改对象 这意味着我想用var newData={“id”:“qqdwsdksfvfscscd”,“newone”:“anything”}更新对象{“id”:“qqdwsdksfvfscscd”,“newone”:“anything”} { "_id" : "wLXDvjDvbsxzfxabR", "group" : [
group.id='fdsfdsfdsfd'
和data.id='qqddwsdksfvfscscd'
更改对象
这意味着我想用var newData={“id”:“qqdwsdksfvfscscd”,“newone”:“anything”}
更新对象{“id”:“qqdwsdksfvfscscd”,“newone”:“anything”}
{
"_id" : "wLXDvjDvbsxzfxabR",
"group" : [
{
"id" : "dfDFSfdsFDSfdsFws",
"title" : "title 1",
"data" : [
{
"id" : "efBDEWVvfdvsvsdvs",
"note" : "text"
}
]
},
{
"id" : "fdsfsFDSFdsfFdsFd",
"title" : "title 2",
"data" : [
{
"id" : "WVvfsvVFSDWVDSVsv",
"note 1" : "text"
},
{
"id" : "qqdWSdksFVfSVSSCD",
"note 2" : "text"
},
{
"id" : "MZgsdgtscdvdsRsds",
"note 3" : "text"
}
]
}
]
}
那么我该如何访问这个对象呢
Collection.update(
{ _id: 'wLXDvjDvbsxzfxabR' },
{ $set: { group.data: newData } } // group: fdsfsFDSFdsfFdsFd, data: qqdWSdksFVfSVSSCD
)
我无法更新嵌套数组元素…如果要更新数组中的特定元素,则必须将其包含在查询中。此外,在嵌套对象中查询时,应将查询括在引号中
// Update element in array with id "dfDFSfdsFDSfdsFws"
Collection.update(
{ _id: "wLXDvjDvbsxzfxabR", "group.id": "dfDFSfdsFDSfdsFws"},
{$set: { "group.data": newData }}
);
大卫的答案很接近:
Collection.update(
{ _id: "wLXDvjDvbsxzfxabR", "group.data.id": "qqdWSdksFVfSVSSCD"},
{$set: { "group.data": newData }}
);
如前所述,现在不可能更新数组中的嵌套数组
若可以的话,我建议您更改文档架构,以便删除数组中的嵌入数组。您可以将一个数组更改为JSON对象:
{
"_id" : "wLXDvjDvbsxzfxabR",
"group" : [
{
"id" : "dfDFSfdsFDSfdsFws",
"title" : "title 1",
"data" : {
"efBDEWVvfdvsvsdvs": {
"note" : "text"
}
}
},
{
"id" : "fdsfsFDSFdsfFdsFd",
"title" : "title 2",
"data" : {
"WVvfsvVFSDWVDSVsv": {
"note 1" : "text"
},
"qqdWSdksFVfSVSSCD": {
"note 2" : "text"
},
"MZgsdgtscdvdsRsds": {
"note 3" : "text"
}
}
}
]
}
使用此模式,您可以使用以下查询更新数据字段中的特定对象:
db.collection.update(
{'group.id': 'fdsfsFDSFdsfFdsFd'},
{$set: {'group.$.data.qqdWSdksFVfSVSSCD': {"new one" : "anything"}}}
)
但我需要两个层次。那么,我如何准确地访问我描述的对象呢。文档中的其他元素不应更改。对不起,我误解了这个问题。见迈克尔·弗洛伊德的答案。也就是说,只需将查询
{u id:“wlxdvjdvbsxfxabr”,“group.id:“dfdfdfsfdsfdsfws”}
更改为{u id:“wlxdvjdvbsxfxfxabr”,“group.data.id:“qqdwsdksfvfscscd”}
。模式不允许我获取“group.data”?这意味着您使用模式管理器(例如:simple模式)-检查模式定义。架构是否允许集合中的组
对象,以及组
对象是否包含数据
数组?我使用aldeed:simpleschema,架构中有一个数组,其中包含对象。模式(根据本例)group:{type:[Object]},group.$。数据:{type:Object}
。但我在两者之间用了<代码>$
。它起作用了。。