Mongodb 如何在集合中添加或填充子文档模型

Mongodb 如何在集合中添加或填充子文档模型,mongodb,mongoose,Mongodb,Mongoose,我已经试着问过这个问题,但我想我还不清楚,因为没有人回答,所以我将在这里给出一个带有一些代码的特定场景 上下文很简单,让我们想象一个每周的锦标赛,每个锦标赛都由游戏组成,游戏由玩家组成 因此,我们有3个模式: TournamentSchema{ 游戏:[{type:mongoose.Schema.Types.ObjectId,ref:'Game'}] 玩家:[ { _用户:{type:mongoose.Schema.Types.ObjectId,ref:'user'}, 点:{type:Num

我已经试着问过这个问题,但我想我还不清楚,因为没有人回答,所以我将在这里给出一个带有一些代码的特定场景

上下文很简单,让我们想象一个每周的锦标赛,每个锦标赛都由游戏组成,游戏由玩家组成

因此,我们有3个模式:

TournamentSchema{
游戏:[{type:mongoose.Schema.Types.ObjectId,ref:'Game'}]
玩家:[
{ 
_用户:{type:mongoose.Schema.Types.ObjectId,ref:'user'},
点:{type:Number}
} 
]//用户为此锦标赛获得的总积分
}
游戏模式{
玩家:[
{ 
_用户:{type:mongoose.Schema.Types.ObjectId,ref:'user'},
点:{type:Number}
} 
]//用户为此特定游戏获得的积分总数
}
球员模式{
伪:{type:String},
电子邮件:{type:String},
积分:{type:Number}//玩家的总收入
//(每场比赛)。
}
这里一切都很好。 为了避免每次客户端想要显示排名(按点数排序的
touring.Players集合
),我都会将锦标赛实例保存到一个特定的模块中(这样我就可以
slice()
排序的
Players集合
中我需要处理的部分)

因此,每当玩家加入游戏时,我必须:

  • 创建一个新的游戏实例,将他添加到其中并保存它
  • 将他添加到现有的
    锦标赛.Players集合中
    ,然后保存它
  • 问题是,我无法将
    模型
    推入
    Tournamanent.Players集合
    ,我猜mongoose无法管理它(插入后
    玩家模型
    会变成
    对象ID
    ):

    var NewPlayer=newplayerschema(
    {伪:“warior”,电子邮件:'warioir@something.com' }
    );
    锦标赛.Players.push({u用户:NewPlayer,点数:0})
    //添加一项:{u用户:,_id:,点:0}pseudo??电子邮件??
    
    因此,当我将一个完整的模型玩家推到填充的锦标赛玩家集合中时,它就变成了ObjectID

    我的问题就在这里,因为在那之后,我有一个
    锦标赛。玩家
    集合有填充和未填充的玩家,管理起来很痛苦! 所以我现在要做的是,每次我推一个玩家模型时,我都会在整个比赛中用一个填充类创建一个新的find(),并用我刚得到的实例替换我的旧实例,但这是一个非常特殊的需要的大操作


    您将如何管理这种情况(需要在存储在模块中的已填充集合上添加模型)

    我会分两步来做。当新玩家加入时,在用户表中创建一个条目,获取该_id,然后将其插入游戏和锦标赛集合中。猫鼬不像你过去使用的其他怪物那么“神奇”。我最近做了一个1k行更改,将mongoose从一个项目中删除,并改用本地驱动程序