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

时间:2016-07-12 21:31:38

标签: mongodb mongodb-query

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

{
    "foo": "bar",
    "": "I should not exist, I have no key..."
}

2 个答案:

答案 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);
});

管理有错误的文档有一些功能,例如空键。