当前位置: 首页 > 面试题库 >

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

邹时铭
2023-03-14
问题内容

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

我想将新的TournamentSession对象(不是Mongoose对象)添加到玩家对象的raceSessions字段中。我正在使用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', 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
    }
}));

问题答案:

您可以_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
}));


 类似资料:
  • 问题内容: 如何将对象添加到数组(使用javascript或jquery)?例如,此代码有什么问题? 我想使用此代码在function1数组中保存许多对象,并调用function2在数组中使用该对象。 如何将对象保存在数组中? 如何将对象放入数组并将其保存到变量? 问题答案: 使用Array.push()将任何东西放入数组。 有关数组的更多信息 一次添加多个项目 将项目添加到数组的开头 将一个数组

  • 我试图向mongodb发送一个数组,但是返回一个空的,而且mongodb文档中从来没有出现biddingGroup字段。我看过堆栈文章,并看到了关于模式的建议。我试过了 应用程序JS 感谢任何帮助。

  • 首先,大家好,看到这个话题的人。我必须在数组末尾添加一个对象。例如,在(public C C(int,int,int)方法中)我必须扩展数组“array2 ”,数组2有两个对象用于(A . B B1 = a1 . new B();),有一个对象为(A . B B2 = a1 . new B();).< br >如何添加对象?< br >非常感谢大家。下面的代码在测试类中

  • 问题内容: 我有一个从JSON文件读取的JSON格式对象,该对象包含在一个名为teamJSON的变量中,如下所示: 我想向数组添加一个新项,例如 最后 在写回文件之前。什么是添加到新元素的好方法?我接近了,但是所有双引号都被转义了。我一直在寻找一个很好的答案,但是没有一个案例能解决这个问题。任何帮助表示赞赏。 问题答案: JSON 只是一种 表示法 ;进行所需的更改,以便可以将更改应用于本机 Ja

  • 问题内容: 我是Java的初学者,正在尝试创建自定义类的数组。假设我有一个名为car的类,并且我想创建一组称为Garage的汽车。如何将每辆车添加到车库?这就是我得到的: 问题答案: 如果要使用数组,则必须保留一个包含车库中汽车数量的计数器。最好使用而不是数组:

  • 问题内容: 我想使用命令将元素添加到JSON文件中的数组,但是不起作用。 文件: 我正在使用此命令: 这是我希望输出看起来的样子: 问题答案: 过滤器中的部件将新元素添加到现有数组。您可以使用类似的过滤器: 为避免使用硬编码的长度值并动态添加新元素,请使用,它返回长度,该长度可用作下一个数组索引,即 (或)根据评论中峰的建议,仅使用运算符 产生所需的输出: 使用jq-play试运行并优化您想要的任