簡體   English   中英

環回findOrCreate即使存在記錄,也會創建新記錄

[英]Loopback findOrCreate creates new records even if there is an existing record

根據我對回送文檔的理解,Persistedmodel.findOrCreate應該根據查詢找到一個模型並返回它,或者如果該模型不存在,則在數據庫中創建一個新條目。

我注意到的是,無論是否存在現有條目,它都會創建一個新條目。

不知道我在想什么。 這是我的代碼:

團隊-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'

我希望它為創建的結果返回false並僅返回現有數據。 當我使用代碼示例中的“ queryThatWorks”查詢時,此方法工作正常。

您無需在where子句中使用and運算符。 參見findOrCreate

{ where: { teamID: teamID, playerID: req.currentUser.id } }

您可以像這樣將數據包括到過濾器中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM