我正在使用Node.js和Mongoose.
玩家和锦标赛变量是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) { // ... });
一切正常,除了包含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',open: Boolean,number: Number,reactionLimit: Number,deadlineAt: Date,stats: { total: Number,limbo: Number,blessed: Number,damned: Number } }));
解决方法
您可以通过使用自己的架构显式定义tournamentSessions数组来禁用_id字段,以便您可以将其
_id
option设置为false:
var Player = mongoose.model('Player',tournamentSessions: [new Schema({ tournament: { type: Schema.Types.ObjectId,score: Number },{ _id: false })],friends: Array }));
原文地址:https://www.jb51.cc/js/240796.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。