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);
    }
);