Node.js와 Mongoose를 사용하고 있습니다. 플레이어 및 토너먼트 변수는 Mongoose 객체이며 직전에 가져옵니다.
플레이어 개체의 토너먼트 세션 필드에 새로운 토너먼트 세션 개체 (몽구스 개체가 아님)를 추가하고 싶습니다. findOneAndUpdate를 사용하여 동일한 토너먼트를 두 번 추가하지 않도록 할 수 있습니다 ( "$ ne"사용).
Player.findOneAndUpdate({
'_id': player._id,
'tournamentSessions.tournament': {
'$ne': tournament._id
}
}, {
'$push': {
'tournamentSessions': {
'tournament': tournament._id,
'level': 1,
'status': 'LIMBO',
'score': 0,
}
}
}, function(err, updatedPlayer) {
// ...
});
ObjectID를 포함하는 "_id"필드가 TournamentSessions 배열 내부에 새로 추가 된 세션에 추가된다는 점을 제외하면 모든 것이 잘 작동합니다. 왜 이런 일이 발생하는지 이해할 수 없습니다.
"_id"필드를 수동으로 추가하고 "BLABLABLA"값을 사용하면 "_id"필드가 저장되지 않습니다 (그렇지 않아야하므로 스키마에 선언되지 않았으므로)
예, 그리고 여기에 스키마가 있습니다.
var Player = mongoose.model('Player', Schema({
createdAt: { type: Date, default: Date.now },
lastActiveAt: Date,
clientVersion: String,
tournamentSessions: [{
tournament: { type: Schema.Types.ObjectId, ref: 'Tournament' },
level: Number,
status: String,
score: Number
}],
friends: Array
}));
var Tournament = mongoose.model('Tournament', Schema({
createdAt: { type: Date, default: Date.now },
open: Boolean,
number: Number,
level: Number,
reactionLimit: Number,
deadlineAt: Date,
stats: {
total: Number,
limbo: Number,
blessed: Number,
damned: Number
}
}));
옵션 을 다음과 같이 설정할 수 있도록 자체 스키마로 배열을 _id
명시 적으로 정의 하여 필드를 비활성화 tournamentSessions
할 수 있습니다 ._id
false
var Player = mongoose.model('Player', Schema({
createdAt: { type: Date, default: Date.now },
lastActiveAt: Date,
clientVersion: String,
tournamentSessions: [new Schema({
tournament: { type: Schema.Types.ObjectId, ref: 'Tournament' },
level: Number,
status: String,
score: Number
}, { _id: false })],
friends: Array
}));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다