Javascript Loopback findOrCreate创建新记录,即使存在现有记录
根据我对环回文档的理解,Persistedmodel.findOrCreate应该根据查询找到一个模型并返回它,或者如果模型不存在,则在数据库中创建一个新条目 在我的例子中,我注意到无论是否存在现有条目,它都会创建一个新条目 不知道我错过了什么。这是我的密码: teams-joined.jsonJavascript Loopback findOrCreate创建新记录,即使存在现有记录,javascript,node.js,loopbackjs,Javascript,Node.js,Loopbackjs,根据我对环回文档的理解,Persistedmodel.findOrCreate应该根据查询找到一个模型并返回它,或者如果模型不存在,则在数据库中创建一个新条目 在我的例子中,我注意到无论是否存在现有条目,它都会创建一个新条目 不知道我错过了什么。这是我的密码: teams-joined.json { "name": "teamsJoined", "base": "PersistedModel", "idInjection": true, "options": { "val
{
"name": "teamsJoined",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"teamID": {
"type": "string",
"required": true
},
"playerID":{
"type":"string",
"required":true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
teams-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'
我希望它为created返回false,而只返回现有数据。
当我使用代码示例中的“QueryTatWorks”查询时,这可以正常工作。您不需要在where子句中使用
和
运算符。看
您可以将数据包含到过滤器中,如下所示:
{ where: joinTeamsData }
要在return语句中返回特定字段,可以在查询中使用fields选项
最后,尝试以下方法:
let data = {
teamID: teamID,
playerID: req.currentUser.id,
};
let filter = { where: data };
teamsJoined.findOrCreate(filter, data,
function(err, instance, created) {
console.log(instance, created);
}
);
我删除了
和
操作符并尝试了。还是一样。根据where过滤器文档,似乎建议使用两个键进行检查,需要使用和运算符。但我想不管使用哪种运算符,结果都是一样的。“筛选”选项不适用于我,因为我的数据模型具有默认id。该id对于每个数据条目都是唯一的。我们可以查看球员和球队模型吗?我尚未创建球队和球员模型。也没有定义将团队连接到任何其他模型的关系。这就是这种奇怪行为的原因吗?
let data = {
teamID: teamID,
playerID: req.currentUser.id,
};
let filter = { where: data };
teamsJoined.findOrCreate(filter, data,
function(err, instance, created) {
console.log(instance, created);
}
);