【问题标题】:how to store multiples records with some constraints?如何存储具有一些约束的多条记录?
【发布时间】:2026-02-20 05:45:01
【问题描述】:

我有一个名为“作者”的模型。它有两个属性。

  firstName: {
      type: 'string',
      unique: true
    },
    lastName: {
      type: 'string',
      unique: true
    }

所以我想插入一个作者数组(名字,姓氏)。所以我使用 create 方法来存储数据。

create: function (req, res) {

        let  authors = req.body.author_name;
        let ids=[],i=0;    
        Author.create(authors,(err,author)=>{
            if(err)res.json('err');
            else res.json(author);
        });
}

in author_name = [{'abc1','xyz1'},{'abc2','xyz2'}]

它会正常工作,但之后当我进入时

作者名 = [{'abc1','xyz1'},{'abc3','xyz3'}]

它不会工作。因为我提到名字和姓氏都应该是唯一的。数组的第一个数据已经在数据库中但是数组的第二个参数不在数据库中。所以最后什么都不会存储。所以我想也存储第二个参数。如果数组中的某些数据已经DB 中,那么它应该被忽略,其他 data 应该是 存储

那么如何以更好的方式做到这一点(如果可能,不要循环)

【问题讨论】:

    标签: mysql node.js sails.js backend


    【解决方案1】:

    我认为您误解了数据库的运行方式。无论您使用哪种数据库技术,Author 对象都由单行或记录表示。当您同时创建 firstNamelastName 唯一字段时,这意味着名字永远不能重复,姓氏也不能重复。因此,例如,您不能使用“Bob Smith”和“Sara Smith”,因为那样会重复姓氏。

    在您在示例中输入的记录中,您没有提供名字或姓氏。它创建了一个单独的记录,其中 firstNamelastName 都为空。由于这些字段是唯一的,因此您不能创建任何其他姓名为空的作者。

    我认为您可能需要考虑是否希望这些字段是唯一的,如果通过 Author 模型存储它真的是您想要的 - 我有点难以理解您所说的“存储第二个论点”,但“忽略第一个论点”。也许您实际上只想存储名称列表,而不是 Author 对象?

    【讨论】:

    • 所以我想存储所有作者的名字和姓氏。但问题是,当任何记录字段重复时,它不会存储所有记录。
    • 我怀疑你想要的是组合名字/姓氏是唯一的。如果是这种情况,我认为您别无选择,只能自己编写代码:既要在创建前检查数据库,又要检查即将创建的新记录中的重复项。
    • 谢谢,你能建议任何方法来做到这一点,或者我只需要遍历循环来检查重复项吗?
    【解决方案2】:

    我认为,您需要对输入数组执行查找查询,它会带来已经可用的记录,然后您需要将它们从输入数据中排除,然后尝试插入唯一数据。

    希望对你有帮助。

    【讨论】:

    • 谢谢,但正如我所提到的,如果有可能在不使用循环或其他查询的情况下插入数据,那么建议我。
    最近更新 更多