Loopback findOrCreate 创建新记录,即使存在现有记录
Loopback findOrCreate creates new records even if there is an existing record
根据我对环回文档的理解Persistedmodel.findOrCreate应该根据查询找到一个模型并return它,或者如果模型不存在则在数据库中创建一个新条目。
我在我的案例中注意到,无论是否存在现有条目,它都会创建一个新条目。
不确定我错过了什么。这是我的代码:
团队-joined.json
{
"name": "teamsJoined",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"teamID": {
"type": "string",
"required": true
},
"playerID":{
"type":"string",
"required":true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
团队-joined.js
let queryThatWorks = {where:{
and: [
{teamID: teamID}
]
}
};
let query = {where:{
and: [
{teamID: teamID},
{playerID: req.currentUser.id},
],
}
};
let joinTeamsData = {
teamID: teamID,
playerID: req.currentUser.id,
};
console.log(query.where,'query');
teamsJoined.findOrCreate(query, joinTeamsData,
function(err, data, created) {
console.log(data,created);
});
当我多次调用 API 时,这就是我得到的结果
{ and:
[ { teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee' },
{ playerID: '5b20887bb6563419505c4590' } ] } 'query'
{ teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee',
playerID: '5b20887bb6563419505c4590',
id: 5b61798534fa410d2b1d900a } 'data'
true 'created'
{ and:
[ { teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee' },
{ playerID: '5b20887bb6563419505c4590' } ] } 'query'
{ teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee',
playerID: '5b20887bb6563419505c4590',
id: 5b61798634fa410d2b1d900b } 'data'
true 'created'
我希望它 return 对于已创建的数据是错误的,而只是 return 现有数据。
当我使用我的代码示例中的 'queryThatWorks' 查询时,这工作正常。
您不需要在 where 子句中使用 and
运算符。参见 findOrCreate。
{ where: { teamID: teamID, playerID: req.currentUser.id } }
您可以像这样将数据包含到过滤器中:
{ where: joinTeamsData }
对于 return 语句中的特定字段,您可以在查询中使用字段选项。
最后,试试这个:
let data = {
teamID: teamID,
playerID: req.currentUser.id,
};
let filter = { where: data };
teamsJoined.findOrCreate(filter, data,
function(err, instance, created) {
console.log(instance, created);
}
);
根据我对环回文档的理解Persistedmodel.findOrCreate应该根据查询找到一个模型并return它,或者如果模型不存在则在数据库中创建一个新条目。
我在我的案例中注意到,无论是否存在现有条目,它都会创建一个新条目。
不确定我错过了什么。这是我的代码:
团队-joined.json
{
"name": "teamsJoined",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"teamID": {
"type": "string",
"required": true
},
"playerID":{
"type":"string",
"required":true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
团队-joined.js
let queryThatWorks = {where:{
and: [
{teamID: teamID}
]
}
};
let query = {where:{
and: [
{teamID: teamID},
{playerID: req.currentUser.id},
],
}
};
let joinTeamsData = {
teamID: teamID,
playerID: req.currentUser.id,
};
console.log(query.where,'query');
teamsJoined.findOrCreate(query, joinTeamsData,
function(err, data, created) {
console.log(data,created);
});
当我多次调用 API 时,这就是我得到的结果
{ and:
[ { teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee' },
{ playerID: '5b20887bb6563419505c4590' } ] } 'query'
{ teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee',
playerID: '5b20887bb6563419505c4590',
id: 5b61798534fa410d2b1d900a } 'data'
true 'created'
{ and:
[ { teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee' },
{ playerID: '5b20887bb6563419505c4590' } ] } 'query'
{ teamID: 'bf36e0-93a5-11e8-a8f4-9d86f4dd79ee',
playerID: '5b20887bb6563419505c4590',
id: 5b61798634fa410d2b1d900b } 'data'
true 'created'
我希望它 return 对于已创建的数据是错误的,而只是 return 现有数据。 当我使用我的代码示例中的 'queryThatWorks' 查询时,这工作正常。
您不需要在 where 子句中使用 and
运算符。参见 findOrCreate。
{ where: { teamID: teamID, playerID: req.currentUser.id } }
您可以像这样将数据包含到过滤器中:
{ where: joinTeamsData }
对于 return 语句中的特定字段,您可以在查询中使用字段选项。
最后,试试这个:
let data = {
teamID: teamID,
playerID: req.currentUser.id,
};
let filter = { where: data };
teamsJoined.findOrCreate(filter, data,
function(err, instance, created) {
console.log(instance, created);
}
);