Javascript Loopback findOrCreate创建新记录,即使存在现有记录

Javascript Loopback findOrCreate创建新记录,即使存在现有记录,javascript,node.js,loopbackjs,Javascript,Node.js,Loopbackjs,根据我对环回文档的理解,Persistedmodel.findOrCreate应该根据查询找到一个模型并返回它,或者如果模型不存在,则在数据库中创建一个新条目 在我的例子中,我注意到无论是否存在现有条目,它都会创建一个新条目 不知道我错过了什么。这是我的密码: teams-joined.json { "name": "teamsJoined", "base": "PersistedModel", "idInjection": true, "options": { "val

根据我对环回文档的理解,Persistedmodel.findOrCreate应该根据查询找到一个模型并返回它,或者如果模型不存在,则在数据库中创建一个新条目

在我的例子中,我注意到无论是否存在现有条目,它都会创建一个新条目

不知道我错过了什么。这是我的密码:

teams-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": {}
}
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);
    }
);