这是一个基于MongoDb - remove all fields that are null的问题。引用的帖子只提供了删除顶级空字段的解决方案。但是,如何删除嵌入的空字段?
请注意我不知道空字段的可能名称及其深度,所以我认为我们必须迭代每个文档的每个字段。
这是一个例子:
{
"id": 14770467,
"f1": "a",
"f2": null,
"f3": [
{
"id": 76946819,
"f4": null
}
]
}
我期待这样的事情:
{
"id": 14770467,
"f1": "a",
"f3": [
{
"id": 76946819
}
]
}
感谢。
答案 0 :(得分:1)
试试这个
const remove = (data) => {
for (let key in data) {
const val = data[key];
if (val == null) {
delete data[key];
} else if (Array.isArray(val)) {
val.forEach((v) => {
remove(v);
});
}
}
return data;
}
db.getCollection('Collection').find({}).forEach((data) => {
data = remove(data);
db.getCollection('OtherCollection').insert(data);
//db.getCollection('Collection').save(data); // update same record
print(data);
})
答案 1 :(得分:0)
上面没有为我工作。但是寻求更多的灵感。
这有效(使用MongoDB Shell版本v4.0.5):
const remove= (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key]);
else if (obj[key] == null) delete obj[key];
});
};
db.getCollection('Collection').find({}).forEach((data) => {
remove(data);
db.getCollection('OtherCollection').insert(data);
})