.findOrCreate()
查找与指定条件匹配的记录。如果不存在这样的记录,则使用提供的初始值创建一个记录。
var newOrExistingRecord = await Something.findOrCreate(criteria, initialValues);
或者,如果您需要知道是否创建了新记录,
Something.findOrCreate(criteria, initialValues)
.exec(function(err, newOrExistingRecord, wasCreated) {
});
# | 参数 | 类型 | 详情 |
---|---|---|---|
1 | criteria | 用于匹配数据库中记录的 Waterline 条件。**此特定条件应始终完全匹配数据库中的零条或一条记录。** | |
2 | initialValues | 如果创建了新记录,则为新记录的初始值。 |
参数 | 类型 | 详情 | |
---|---|---|---|
1 | err | 发生的错误,或如果没有任何错误则为 undefined 。 |
|
2 | newOrExistingRecord | 找到的记录,或如果找不到这样的记录则为 undefined 。 |
|
3 | wasCreated | 是否创建了新记录。 |
名称 | 类型 | 何时 |
---|---|---|
UsageError | 如果传入了一些无效的内容,则抛出。 | |
AdapterError | 如果数据库适配器中出现问题,则抛出。 | |
Error | 如果发生任何其他意外情况,则抛出。 |
有关在 Sails 和 Waterline 中协商错误的示例,请参阅 概念 > 模型和 ORM > 错误。
让我们确保我们的测试用户 Finn 存在
User.findOrCreate({ name: 'Finn' }, { name: 'Finn' })
.exec(async(err, user, wasCreated)=> {
if (err) { return res.serverError(err); }
if(wasCreated) {
sails.log('Created a new user: ' + user.name);
}
else {
sails.log('Found existing user: ' + user.name);
}
});
- 此方法可以与
await
、promise 链或 传统的 Node 回调 一起使用。如果您使用await
,请注意结果将仅是记录 - 您将无法访问wasCreated
。- 在幕后,这使用
.findOne()
,因此如果数据库中的多个记录与提供的条件匹配,则会出现一个错误说明。