findOrCreate 没有在我的数据库中找到数据
findOrCreate is not finding data in my db
我创建了一个远程方法来对我的数据库进行多次查询,我想在其中一次查找或创建最多 12 个用户模型。在环回资源管理器中,我将这个数组 ["player0", "player1", "player2"]
传递给我的函数,我知道它已经在我的数据库中了。但是,我 运行 遇到的问题是返回状态 200 和一个空值数组。如果我传递不在数据库中的名称,我将按预期为每个名称返回一个对象,其中包含所有默认值。
所以我的问题是我代码的查找部分有什么问题?
我已经尝试将 where 子句添加到我的 findOrCreate 中,但它仍然返回一个空数组。
更新:这是完整的方法
function getPlayerStats(names) {
console.log('names: ', names);
return new Promise((resolve, reject) => {
const { Player } = app.models;
const playerData = names.map(name => {
console.log('single name: ', name);
const defaultSkill = 1500;
return Player.findOrCreate(
{ where: { name: name } },
{
name: name,
careerSkill: defaultSkill,
careerHighestSkill: defaultSkill,
careerWins: 0,
careerLosses: 0,
careerPercent: 0,
careerBestLeader: 'none',
careerAllLeader: ['none'],
highestCareerSkill: defaultSkill,
careerSeasonWins: 0,
careerSeasonLosses: 0,
careerSeasonPercent: 0
}
);
});
Promise.all(playerData)
.then(results => resolve(results))
.catch(err => reject(new Error('could not return results')));
});
}
module.exports = { getPlayerStats };```
我认为你应该在 Player.findOrCreate({name: name},
之前添加 return
Player.findOrCreate({ where: { name: name } },...
是过滤器的正确版本。
此外,您可以省略该回调 (err) => {
因为您有 catch
块
整个函数可能如下所示:
player.js
Player.getPlayerStats = function (names, cb) {
const playerPromises = names.map(name => {
const defaultSkill = 1500;
return Player.findOrCreate({ where: { name: name } }, {
"name": name,
"careerSkill": defaultSkill,
"careerHighestSkill": defaultSkill,
"careerWins": 0,
"careerLosses": 0,
"careerPercent": 0,
"careerBestLeader": "none",
"careerAllLeader": ["none"],
"highestCareerSkill": defaultSkill,
"careerSeasonWins": 0,
"careerSeasonLosses": 0,
"careerSeasonPercent": 0
})
})
Promise.all(playerPromises)
.then(players => cb(null, players))
.catch(err => cb(new Error('could not return results'), null))
}
我创建了一个远程方法来对我的数据库进行多次查询,我想在其中一次查找或创建最多 12 个用户模型。在环回资源管理器中,我将这个数组 ["player0", "player1", "player2"]
传递给我的函数,我知道它已经在我的数据库中了。但是,我 运行 遇到的问题是返回状态 200 和一个空值数组。如果我传递不在数据库中的名称,我将按预期为每个名称返回一个对象,其中包含所有默认值。
所以我的问题是我代码的查找部分有什么问题?
我已经尝试将 where 子句添加到我的 findOrCreate 中,但它仍然返回一个空数组。
更新:这是完整的方法
function getPlayerStats(names) {
console.log('names: ', names);
return new Promise((resolve, reject) => {
const { Player } = app.models;
const playerData = names.map(name => {
console.log('single name: ', name);
const defaultSkill = 1500;
return Player.findOrCreate(
{ where: { name: name } },
{
name: name,
careerSkill: defaultSkill,
careerHighestSkill: defaultSkill,
careerWins: 0,
careerLosses: 0,
careerPercent: 0,
careerBestLeader: 'none',
careerAllLeader: ['none'],
highestCareerSkill: defaultSkill,
careerSeasonWins: 0,
careerSeasonLosses: 0,
careerSeasonPercent: 0
}
);
});
Promise.all(playerData)
.then(results => resolve(results))
.catch(err => reject(new Error('could not return results')));
});
}
module.exports = { getPlayerStats };```
我认为你应该在 Player.findOrCreate({name: name},
之前添加 return
Player.findOrCreate({ where: { name: name } },...
是过滤器的正确版本。
此外,您可以省略该回调 (err) => {
因为您有 catch
块
整个函数可能如下所示:
player.js
Player.getPlayerStats = function (names, cb) {
const playerPromises = names.map(name => {
const defaultSkill = 1500;
return Player.findOrCreate({ where: { name: name } }, {
"name": name,
"careerSkill": defaultSkill,
"careerHighestSkill": defaultSkill,
"careerWins": 0,
"careerLosses": 0,
"careerPercent": 0,
"careerBestLeader": "none",
"careerAllLeader": ["none"],
"highestCareerSkill": defaultSkill,
"careerSeasonWins": 0,
"careerSeasonLosses": 0,
"careerSeasonPercent": 0
})
})
Promise.all(playerPromises)
.then(players => cb(null, players))
.catch(err => cb(new Error('could not return results'), null))
}