bob*_*off 6 javascript mongoose mongodb node.js
我正在使用Node.js和Mongoose.玩家和锦标赛变量是Mongoose对象,就在之前获取.
我想在播放器对象的tournamentSessions字段中添加一个新的tournamentSession对象(不是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) {
// ...
});
Run Code Online (Sandbox Code Playgroud)
一切正常,除了包含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
}
}));
Run Code Online (Sandbox Code Playgroud)
您可以_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
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2639 次 |
最近记录: |