gpt4 book ai didi

javascript - 为什么使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?

转载 作者:IT老高 更新时间:2023-10-28 13:26:12 26 4
gpt4 key购买 nike

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

我想将新的锦标赛 session 对象(不是 Mongoose 对象)添加到玩家对象的锦标赛 session 字段中。我正在使用 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”字段被添加到锦标赛 session 数组中新添加的 session 中,我不明白为什么会发生这种情况。

如果我手动添加“_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
}
}));

最佳答案

您可以通过使用自己的模式显式定义 tournamentSessions 数组来禁用 _id 字段,以便您可以设置它的 _id optionfalse:

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

关于javascript - 为什么使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com