我已经能够在MongoDB集合中添加大量空键。由于MongoDB中不允许使用空键,因此我很难使用MongoDB中的常规方法取消设置密钥。使用mongo shell有没有解决这类问题的方法?
{
"foo": "bar",
"": "I should not exist, I have no key..."
}
答案 0 :(得分:3)
我们可以使用批量操作删除空字符串字段。
我们需要遍历游标快照,然后使用bulkWrite
方法批量更新文档。请注意,我们需要替换文档,因为我们无法$unset
空字段或重命名它。因此,这里无法进行更新操作。
let requests = [];
db.coll.find( { "": { "$exists": true } } ).snapshot().forEach( document => {
delete document[""];
requests.push( {
"replaceOne": {
"filter": { "_id": document._id },
"replacement": document
}
});
if ( requests.length === 1000 ) {
// Execute per 1000 operations and re-init
db.coll.bulkWrite(requests);
requests = [];
}
});
// Clean up queues
if ( requests.length > 0 ) {
db.coll.bulkWrite(requests);
}
答案 1 :(得分:1)
给这个扔......
db.collection.find().forEach(function(doc) {
delete doc[''];
db.collection.save(doc);
});
管理有错误的文档有一些功能,例如空键。