MongoDB의 $ push를 사용하여 배열에 새 객체를 추가 할 때 ObjectID가있는 _id가 추가되는 이유는 무엇입니까?

밥 모프

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
    }
}));
JohnnyHK

옵션다음과 같이 설정할 수 있도록 자체 스키마로 배열을 _id명시 적으로 정의 하여 필드를 비활성화 tournamentSessions할 수 있습니다 ._idfalse

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관