我已经能够在MongoDB集合中添加大量的空键。由于MongoDB中不允许空键,所以我很难在MongoDB中使用常规方法取消键。有使用mongo shell的这种问题的解决方法吗?从文档中删除空字段的名称
{
"foo": "bar",
"": "I should not exist, I have no key..."
}
我已经能够在MongoDB集合中添加大量的空键。由于MongoDB中不允许空键,所以我很难在MongoDB中使用常规方法取消键。有使用mongo shell的这种问题的解决方法吗?从文档中删除空字段的名称
{
"foo": "bar",
"": "I should not exist, I have no key..."
}
我们可以使用批量操作删除空字符串字段。
我们需要迭代光标快照,然后使用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);
}
这是切肉刀! – user1885523
给这个一抛....
db.collection.find().forEach(function(doc) {
delete doc[''];
db.collection.save(doc);
});
有一些能力来管理在他们的错误,如空键文件。
不要这样做!这对性能不利。他们是更好的方式来“解除”该领域。 – styvane
请提供更好的解决方案。谢谢。 – arcee123
Thx的想法。这会在我的MongoDB shell版本中触发错误:3.2.5 E QUERY [thread1] SyntaxError:missing]在元素列表之后: – user1885523
您在每个文档中有多少个字段? – styvane
每个文件大约20场 – user1885523