NodeJS + MongoDB如何删除集合文档的嵌套字段及批量多字段
问题1:删除
position字段不生效原因及解决方法 position字段不属于文档顶层字段,是嵌套在personalDetails对象下的子字段,MongoDB 操作嵌套字段必须使用点表示法指定完整字段路径,直接写position只会尝试删除不存在的顶层position字段,因此没有效果。
正确写法如下:
var MongoClient = require('mongodb').MongoClient; var url = "URI"; MongoClient.connect(url, function(err, db) { if (err) throw err; var dbo = db.db("sample_airbnb"); // 用点表示法指定嵌套字段的完整路径 dbo.collection("customers").updateMany({}, {$unset: {"personalDetails.position": 1}}).then(res => { console.log(res); }).catch(err => console.log(err)); });
问题2:批量删除数组指定的多个字段
你可以通过数组动态构造$unset需要的配置对象即可实现批量删除,示例代码如下:
var MongoClient = require('mongodb').MongoClient; var url = "URI"; MongoClient.connect(url, function(err, db) { if (err) throw err; var dbo = db.db("sample_airbnb"); // 待删除字段数组,嵌套字段需写完整路径 var fieldsToRemove = ["personalDetails.position", "documentType"]; // 动态构造$unset配置对象 var unsetConfig = fieldsToRemove.reduce((config, field) => { config[field] = 1; return config; }, {}); // 执行批量更新删除 dbo.collection("customers").updateMany({}, {$unset: unsetConfig}).then(res => { console.log(res); }).catch(err => console.log(err)); });
如果你的数组中只存储字段名,需要提前对嵌套字段补全路径再做构造即可。
内容的提问来源于stack exchange,提问作者Wilbur Dsouza
相关产品推荐
相关产品推荐

