Node.js 更新并指定addToSet的密钥
我创建了一个模型,其中包含一组Node.js 更新并指定addToSet的密钥,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我创建了一个模型,其中包含一组匹配项。但是,每次我更新文档时,它只是将匹配项添加到匹配项,这会导致重复。我想知道是否有一种方法可以让我指定一个键,在我的例子中是matchId,如果它已经存在于matches集合中,它应该更新集合中的特定对象 型号 var leagueSchema = new Schema({ _id: Number, name: String, league: Number, matches: [{ matchId: Number
匹配项。但是,每次我更新文档时,它只是将匹配项添加到匹配项
,这会导致重复。我想知道是否有一种方法可以让我指定一个键,在我的例子中是matchId
,如果它已经存在于matches
集合中,它应该更新集合中的特定对象
型号
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) {
});
您可以使过滤器更精确。当找到matchId
时,您可以排除matches
数组中的项。当在匹配项中找到您的matchId时,它将不会“找到”文档,因此不会更新文档。(我知道这很混乱!)您的查询将如下所示:
League.update({league: leagueId, 'matches.matchId': {$ne: matchId}}, {$addToSet: {matches: queryData}})
.exec(function(err, update) {
// Do something
});
您可以使过滤器更精确。当找到matchId
时,您可以排除matches
数组中的项。当在匹配项中找到您的matchId时,它将不会“找到”文档,因此不会更新文档。(我知道这很混乱!)您的查询将如下所示:
League.update({league: leagueId, 'matches.matchId': {$ne: matchId}}, {$addToSet: {matches: queryData}})
.exec(function(err, update) {
// Do something
});
@我觉得这个问题有点不同。在这种情况下,如果存在具有相同matchId密钥的匹配记录,则需要更新匹配记录。因此它不是重复的,你的答案也不是这个问题的完整答案。@RashadIbrahimov明白了,我第一次没听清楚,谢谢。@JohnnyHK我觉得这个问题有点不同。在这种情况下,如果存在具有相同matchId密钥的匹配记录,则需要更新匹配记录。因此它不是重复的,你的答案也不是这个问题的完整答案。@RashadIbrahimov明白了,我第一次没听清楚,谢谢。