복붙노트

[MONGODB] 왜 OBJECTID과 _id는 배열에 새 개체를 추가하여 MongoDB의 $ 푸시를 사용하는 경우에 추가됩니다?

MONGODB

왜 OBJECTID과 _id는 배열에 새 개체를 추가하여 MongoDB의 $ 푸시를 사용하는 경우에 추가됩니다?

나는 Node.js를하고 몽구스를 사용하고 있습니다. 선수 및 대회 변수는 몽구스의 객체 직전 가져.

나는 플레이어 오브젝트의 tournamentSessions 필드에 새 tournamentSession 객체 (안 몽구스 개체)를 추가하고 싶습니다. 나는 (이하 "$ 네브라스카"을 사용) 나도 같은 tournement을 두 번 추가 해달라고 있는지 확인 할 수 있도록 findOneAndUpdate을 사용하고 있습니다

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

해결법

  1. ==============================

    1.당신은 명시 적으로 false로 _id 옵션을 설정할 수 있도록 자신의 스키마와 tournamentSessions 배열을 정의하여 _id 필드를 비활성화 할 수 있습니다 :

    당신은 명시 적으로 false로 _id 옵션을 설정할 수 있도록 자신의 스키마와 tournamentSessions 배열을 정의하여 _id 필드를 비활성화 할 수 있습니다 :

    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
    }));
    
  2. from https://stackoverflow.com/questions/20863441/why-is-an-id-with-objectid-added-to-when-using-mongodbs-push-to-add-new-objec by cc-by-sa and MIT license