在nodejs

时间:2017-09-14 11:07:42

标签: javascript node.js mongodb mongoose

我正在开发一个节点js项目,最终用户可以在mongoDb数据库中创建和更新插座。现在,让我们说出口模式中有数百个字段,但是用户可能不会更新每个字段,即一个可以更新2个字段,其他可以更新3个字段。所以,我想创建一个可以处理每种类型请求的函数。我不知道这可以做到或有其他方式,但我是新手,你能否建议我适合我的项目。提前致谢!

对于之前的混乱感到抱歉。

我正在开发零售店的nodejs项目。注册时,每个插座在数据库中有超过50个字段。注册很好。通过API的POST请求指定了所需的所有数据。

但是当我计划更新任何一个领域时。我不知道处理什么方法。有时只会更改一个字段,或者下次一组字段没有顺序/顺序。 示例:

{"id":"ABCD", "name":"MNOPQR"}
{"id":"ABCD", "time":123, "name":"ZYX"}

所以在第一次查询中我只需要更新名称,而在接下来我需要更新名称和时间。 有没有什么办法可以在服务器端管理动态json解析,只更新请求中提到的那些字段(int数据库)。

2 个答案:

答案 0 :(得分:0)

您可以使用多种方法。

一种是接受带有变化的对象:

function doTheChanges(changes) {
    Object.keys(changes).forEach(name => {
        const value = changes[name];
        // Use `name` (the field name) and `value` (the value) to do the update
    });
}

这样称呼:

doTheChanges({foo: "bar", biz: "baz"});

...将foo字段更改为"bar",将biz字段更改为"baz"。 (具有无效标识符字符等的名称可以用双引号括起来:{"I'm an interesting field name": "bar"}。)

或者,您可以使用namevalue属性接受一系列更改:

function doTheChanges(changes) {
    changes.forEach(({name, value}) => {
        // Use `name` (the field name) and `value` (the value) to do the update
    });
}

这样称呼:

doTheChanges([
    {
        name: "foo",
        value: "bar"
    },
    {
        name: "biz",
        value: "baz"
    }
]);

您也可以接受不同数量的参数,其中每个参数都是具有namevalue属性的对象:

function doTheChanges(...changes) {
    changes.forEach(({name, value}) => {
        // Use `name` (the field name) and `value` (the value) to do the update
    });
}

这样称呼:

doTheChanges(
    {
        name: "foo",
        value: "bar"
    },
    {
        name: "biz",
        value: "baz"
    }
);

请注意,这与数组选项非常相似。

或者使用builder pattern,但这可能是过度杀伤。

答案 1 :(得分:0)

您可以使用put请求代替patch请求,以便只有您更改的值会受到影响。