递归更新猫鼬文档

时间:2020-08-22 15:06:39

标签: node.js mongodb recursion mongoose

我目前正在尝试对文档进行对称(AES256-GCM)加密,然后再将其保存到数据库中。因此,我迷上了pre('save')方法来获取数据并对其进行加密,然后再将其保存到数据库中。我需要执行此操作,以符合要求对所有医疗数据进行加密且只能由拥有该数据的用户解密的法规。这是有一点背景的

因此,我为用户提供了一个复杂的架构设置,其中包含很多PII信息,因此我无法发布示例,但可以为您提供经过净化的JSON数据结构,但不会泄露我的身份正在努力。 (NDAs ...)。

{
    "title": "",
    "firstName": "",
    "lastName": "",
    "XXXXXXXXXX": [{
        "XXX": "",
        "XXX": "",
        "XXX": "",
        "XXX": "",
        "XXX": "",
        "XXX": "",
        "XXX": "",
        "XXX": ""
    }],
    "contact": {
        "contactNumbers": [{
            "type": "",
            "number": ""
        }],
        "emailAddresses": [{
            "type": "",
            "address": ""
        }]
    },
    "XXX": {
        "XXX": {
            "XXX": "",
            "firstName": "",
            "lastName": "",
            "XXX": ""
        },
        "XXX": [{
            "XXX": "",
            "firstName": "",
            "lastName": "",
            "XXX": ""
        }],
        "name": "",
        "XXX": "",
        "XXX": "",
        "XXX": ""
    },
    "XXX": [{
        "name": "",
        "number": ""
    }],
    "XXX": [{
        "code": "",
        "name": "",
        "XXX": "",
        "XXX": ""
    }],
    "XXX": [{
        "code": "",
        "name": "",
        "XXX": "",
        "XXX": ""
    }],
    "XXX": [{
        "name": "",
        "XXX": "",
        "contactNumber": "",
        "emailAddress": "",
        "address": {
            "street1": "",
            "street2": "",
            "suburb": "",
            "city": "",
            "province": "",
            "country": "",
            "postalCode": ""
        }
    }]
} 

因此,我一直在尝试递归地遍历数据,以便可以在保存文档之前对每个字段进行加密。我碰到了following package,它有些起作用。它不会递归到数组中。我尝试将文档转换为JSON对象,以使其更易于使用。除了从文档对象中删除元数据外,这无济于事。

我试图编写一个草书函数(C#是我的操纵室),但是我无法访问JSON对象的子代的长度,因此无法对此进行递归。

如果有人能够解决通过Mongoose文档进行递归的问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,所以我提到的package可以解决问题。有一个未指定的选项将数组视为对象,这允许迭代器递归到数组中。因此,有效的迭代器如下所示:

let iterator = require('object-recursive-iterator');
iterator.forAll(jsonProfile, (path, key, obj) => {
    obj[key] = 'processed';
}, {treatArrayAsObject: true}); 

希望这对以后的人有帮助。