MongoDB $addToSet 是否可用于添加深度嵌套的对象数组?
$addToSet 运算符向数组添加一个值,除非该值已存在,在这种情况下 $addToSet 对该数组不执行任何操作。
让我们先使用文档创建集合 −
> db.demo380.insertOne({ ... ... "details" : [ ... { ... "Name" : "Chris", ... "details1" : [ ] ... }, ... { ... "Name" : "David", ... "details1" : [ ] ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5b56e32ae06a1609a00b11") }
使用 find() 方法显示集合中的所有文档 −
> db.demo380.find().pretty();
将生成以下输出 −
{ "_id" : ObjectId("5e5b56e32ae06a1609a00b11"), "details" : [ { "Name" : "Chris", "details1" : [ ] }, { "Name" : "David", "details1" : [ ] } ] }
以下是添加深度嵌套的对象数组的查询 −
> db.demo380.update({ ... "details.Name": "David" ... }, { ... $addToSet: { ... "details.$.details1": { ... 'SubjectName': "MongoDB", ... 'TeacherName':"Bob" ... } ... } ... }, false, true); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
使用 find() 方法显示集合中的所有文档 −
> db.demo380.find().pretty();
将生成以下输出 −
{ "_id" : ObjectId("5e5b56e32ae06a1609a00b11"), "details" : [ { "Name" : "Chris", "details1" : [ ] }, { "Name" : "David", "details1" : [ { "SubjectName" : "MongoDB", "TeacherName" : "Bob" } ] } ] }
广告