我已经创建了一个带有matches
集的模型。但是,每次更新文档时,只会将匹配项添加到matches
,这会导致重复。我想知道是否有一个方法可以让我指定一个键,在我的情况下是matchId
,如果它已经存在于matches
集中,它应该更新集合中的那个特定对象吗? / p>
模型
var leagueSchema = new Schema({
_id: Number,
name: String,
league: Number,
matches: [{
matchId: Number,
date: Date,
tournament: String,
homeName: String,
awayName: String,
awayScore: Number,
homeScore: Number,
homeLogo: String,
awayLogo: String
}]
});
更新查询
var queryData = {'matchId': matchId, 'date': date, 'tournament': tournament, 'homeName': homeTeam, 'awayName': awayTeam, 'awayScore': awayScore, 'homeScore': homeScore, 'homeLogo': homeLogo, 'awayLogo': awayLogo};
League.update({league: leagueId}, {$addToSet: {matches: queryData}})
.exec(function(err, update) {
});
答案 0 :(得分:0)
您可以使过滤器更精确。找到matches
后,您可以在matchId
数组中排除($ne)个项目。找到匹配项中的matchId后,它将不会“找到”文档,因此不会更新文档。 (我知道这很令人困惑!)您的查询将如下所示:
League.update({league: leagueId, 'matches.matchId': {$ne: matchId}}, {$addToSet: {matches: queryData}})
.exec(function(err, update) {
// Do something
});