Javascript 为什么在使用MongoDB'时会添加带有ObjectID的"U id";s$push是否向数组添加新对象?

Javascript 为什么在使用MongoDB'时会添加带有ObjectID的"U id";s$push是否向数组添加新对象?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在使用Node.js和Mongoose。 玩家和锦标赛变量是Mongoose对象,在之前获取 我想在玩家对象的tournamentSessions字段中添加一个新的tournamentSession对象(不是Mongoose对象)。我使用findOneAndUpdate来确保我不会两次添加相同的tournement(使用“$ne”) 一切正常,除了包含ObjectID的“\u id”字段被添加到tournamentSessions数组中新添加的会话中,我无法理解为什么会发生这种情况 如果我手

我正在使用Node.js和Mongoose。 玩家和锦标赛变量是Mongoose对象,在之前获取

我想在玩家对象的tournamentSessions字段中添加一个新的tournamentSession对象(不是Mongoose对象)。我使用findOneAndUpdate来确保我不会两次添加相同的tournement(使用“$ne”)

一切正常,除了包含ObjectID的“\u id”字段被添加到tournamentSessions数组中新添加的会话中,我无法理解为什么会发生这种情况

如果我手动添加“_id”字段并使用值“blabla”,则永远不会存储“_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
    }
}));

您可以通过使用自己的架构显式定义
tournamentSessions
数组来禁用
\u 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
}));

工作起来很有魅力。谢谢你的快速回复!你不知道如何让这个新的领域“锦标赛”独一无二吗?我想阻止球员两次参加同一项赛事。我在现场尝试设置unique=true,但仍然有效。
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
}));