Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor:更新文档数组中的嵌套对象_Javascript_Mongodb_Meteor - Fatal编程技术网

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}
。但我在两者之间用了<代码>$
。它起作用了。。