如何使用一些约束存储多个记录?

时间:2018-02-15 10:28:10

标签: mysql node.js sails.js backend

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

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

所以我想插入一个作者数组(firstName,lastName)。所以我用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);
        });
}

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

当我输入

时,它会正常运行 之后

author_name = [{'abc1','xyz1'},{'abc3','xyz3'}]

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

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

2 个答案:

答案 0 :(得分:0)

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

我希望它会对你有所帮助。

答案 1 :(得分:0)

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

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

我认为您可能需要考虑是否希望这些字段是唯一的,如果通过Author模型存储它真的是您想要的 - 我在理解您的意思时遇到了一些麻烦“存储第二个参数“但是”忽略第一个“。也许你真的只想存储一个名单,而不是Author个对象?