从文档中删除空字段的名称

use*_*523 5 mongodb mongodb-query

我已经能够在 MongoDB 集合中添加大量空键。由于 MongoDB 中不允许使用空键,因此我很难使用 MongoDB 中的常规方法取消设置键。使用 mongo shell 是否有解决此类问题的方法?

{
    "foo": "bar",
    "": "I should not exist, I have no key..."
}
Run Code Online (Sandbox Code Playgroud)

sty*_*ane 4

我们可以使用批量操作删除空字符串字段。

我们需要迭代游标快照,然后使用bulkWritemethod 方法批量更新文档。请注意,我们需要替换文档,因为我们无法$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);
}
Run Code Online (Sandbox Code Playgroud)