如何在MongoDB现有文档中新增指定数组字段?
修正MongoDB嵌套字段更新的问题
嗨,我看你已经离正确答案很近啦!问题出在字段路径上——你之前的代码把Sports数组加到了文档的根层级,而不是settings子文档里面。
正确的更新代码
你只需要调整$set里的字段路径,用点号.来指定嵌套在settings下的Sports字段就行:
var value = [ { "class": "1", "name": "Cricked" }, { "class": "2", "type": "Football" } ] // 推荐用updateMany,语法更直观(MongoDB 3.2+支持) db.Colleges.updateMany( {}, // 匹配集合中所有文档 { $set: { "settings.Sports": value } } // 将数组插入到settings子文档下 ) // 如果你习惯用旧版update语法,也可以保留multi:true参数: // db.Colleges.update({}, { $set : { "settings.Sports": value } }, { multi: true })
为什么之前的代码不对?
你原来写的{ $set : { "Sports": value } }会在每个文档的根节点新增Sports字段,而不是嵌套到settings里面。MongoDB中,用.分隔的路径可以精准定位嵌套字段,这是操作子文档的核心技巧哦。
验证更新结果
执行完更新后,你可以用以下命令查看修改后的文档,确认结构符合预期:
db.Colleges.find({}, { schoolID: 1, settings: 1 })
输出会和你想要的完全一致:
{ "schoolID" : "5ca5e1915e6f66641efasr", "settings" : { "sportsAllowed" : true, "Sports": [ { "class": "1", "name": "Cricked" }, { "class": "2", "type": "Football" } ] } }, { "schoolID" : "5ca5e1915e6f623466ef3a", "settings" : { "sportsAllowed" : true, "Sports": [ { "class": "1", "name": "Cricked" }, { "class": "2", "type": "Football" } ] } }
内容的提问来源于stack exchange,提问作者Bhuvan M
相关产品推荐
相关产品推荐

