更新并指定addToSet的密钥

时间:2015-11-15 14:34:01

标签: node.js mongodb mongoose

我已经创建了一个带有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) {
});

1 个答案:

答案 0 :(得分:0)

您可以使过滤器更精确。找到matches后,您可以在matchId数组中排除($ne)个项目。找到匹配项中的matchId后,它将不会“找到”文档,因此不会更新文档。 (我知道这很令人困惑!)您的查询将如下所示:

League.update({league: leagueId, 'matches.matchId': {$ne: matchId}}, {$addToSet: {matches: queryData}})
    .exec(function(err, update) {
        // Do something
    });