我有一个叫做玩家的模式和另一个叫做游戏的模式。每个游戏都有一个名为玩家的属性,它是对玩家对象的引用数组。
游戏架构
let GameSchema = new mongoose.Schema({
players: [{
ref: "Player",
type: mongoose.Schema.Types.ObjectId,
}],
created: {
type: Date,
default: Date.now,
}
}, { usePushEach: true });
球员模式
let PlayerSchema = new mongoose.Schema({
parentGameId: mongoose.Schema.Types.ObjectId,
idInGame: Number,
points: Number,
});
MongoDb连接
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost/ScoreKeeper", { useMongoClient: true });
用于在post路线上初始化游戏和玩家的代码。(我正在使用Express)
app.post('/', function(req, res) {
let players = Number(req.body.players);
Game.create({
players: [],
}, function(error, newGame) {
if (error) {
console.log(error);
} else {
let currentGameID = newGame._id;
for (let i = 1; i <= players; i++) {
Player.create({
parentGameId: currentGameID,
idInGame: i,
points: 0
}, function(error, newPlayer) {
if (error) {
console.log(error);
} else {
newGame.players.push(newPlayer._id);
newGame.save(function(error, newGame) {
if (error) {
console.log(error);
} else {
console.log("New Player added");
}
});
}
});
}
}
});
});
在节点控制台的终端上,当我创建5个播放器时,我有以下输出:
新玩家加入
新玩家加入
新玩家加入
新玩家加入
新玩家加入
现在,当我转到mongo控制台并查看玩家集合时,我发现有5个玩家按照预期创建。使用“db.players.find()”
{“id”:ObjectId(“5a6159685d3dabb00d0065b0”),“parentGameId”:ObjectId(“5a6159685d3dabb00d0065af”),“IDIGAME”:1,“点数”:0,“\U v”:0}
{“id”:ObjectId(“5a6159685d3dabb00d0065b1”),“parentGameId”:ObjectId(“5a6159685d3dabb00d0065af”),“IDIGAME”:2,“点数”:0,“\U v”:0}
{“id”:ObjectId(“5a6159685d3dabb00d0065b2”),“parentGameId”:ObjectId(“5a6159685d3dabb00d0065af”),“IDIGAME”:3,“点数”:0,“\U v”:0}
{"_id": ObjectId("5a6159685d3dabb00d0065b3"),"家长游戏": ObjectId("5a6159685d3dabb00d0065af"),"idInGame": 4,"点": 0,"__v": 0}
{"_id": ObjectId("5a6159685d3dabb00d0065b4"),"家长游戏": ObjectId("5a6159685d3dabb00d0065af"),"idInGame": 5,"点": 0,"__v": 0}
然而,当我在mongo控制台中检查游戏对象时,我发现。。。
db。游戏。芬顿()
{
"_id" : ObjectId("5a6159685d3dabb00d0065af"),
"created" : ISODate("2018-01-19T02:35:20.632Z"),
"players" : [
ObjectId("5a6159685d3dabb00d0065b1"),
ObjectId("5a6159685d3dabb00d0065b1"),
ObjectId("5a6159685d3dabb00d0065b0"),
ObjectId("5a6159685d3dabb00d0065b1"),
ObjectId("5a6159685d3dabb00d0065b0"),
ObjectId("5a6159685d3dabb00d0065b2"),
ObjectId("5a6159685d3dabb00d0065b3"),
ObjectId("5a6159685d3dabb00d0065b3"),
ObjectId("5a6159685d3dabb00d0065b4")
],
"__v" : 5
}
游戏和玩家之间存在不匹配,我觉得错误在于添加newPlayer
后保存newGame
。奇怪的是,\u v
属性按预期读取5。你能给我指一下修复这个错误的方向吗?
多谢各位
在代码中保存游戏文档时存在错误
使用update
方法和push
来添加ObjectId
s玩家,而不是save
newGame.update({$push:{players : newPlayer._id} }, function(error, newGame) {...}
安慰
Mongoose: games.insert({ _id: ObjectId("5a6168c12478110e7aa74d5d"), created: new Date("Fri, 19 Jan 2018 03:40:49 GMT"), players: [], __v: 0 })
Mongoose: players.insert({ parentGameId: ObjectId("5a6168c12478110e7aa74d5d"), idInGame: 1, points: 0, _id: ObjectId("5a6168c12478110e7aa74d5e"), __v: 0 })
Mongoose: players.insert({ parentGameId: ObjectId("5a6168c12478110e7aa74d5d"), idInGame: 2, points: 0, _id: ObjectId("5a6168c12478110e7aa74d5f"), __v: 0 })
Mongoose: players.insert({ parentGameId: ObjectId("5a6168c12478110e7aa74d5d"), idInGame: 3, points: 0, _id: ObjectId("5a6168c12478110e7aa74d60"), __v: 0 })
Mongoose: players.insert({ parentGameId: ObjectId("5a6168c12478110e7aa74d5d"), idInGame: 4, points: 0, _id: ObjectId("5a6168c12478110e7aa74d61"), __v: 0 })
Mongoose: players.insert({ parentGameId: ObjectId("5a6168c12478110e7aa74d5d"), idInGame: 5, points: 0, _id: ObjectId("5a6168c12478110e7aa74d62"), __v: 0 })
Mongoose: games.update({ _id: ObjectId("5a6168c12478110e7aa74d5d") }, { '$push': { players: ObjectId("5a6168c12478110e7aa74d62") } }, {})
Mongoose: games.update({ _id: ObjectId("5a6168c12478110e7aa74d5d") }, { '$push': { players: ObjectId("5a6168c12478110e7aa74d5f") } }, {})
Mongoose: games.update({ _id: ObjectId("5a6168c12478110e7aa74d5d") }, { '$push': { players: ObjectId("5a6168c12478110e7aa74d61") } }, {})
Mongoose: games.update({ _id: ObjectId("5a6168c12478110e7aa74d5d") }, { '$push': { players: ObjectId("5a6168c12478110e7aa74d60") } }, {})
Mongoose: games.update({ _id: ObjectId("5a6168c12478110e7aa74d5d") }, { '$push': { players: ObjectId("5a6168c12478110e7aa74d5e") } }, {})
蒙戈CLI
> db.players.find()
{ "_id" : ObjectId("5a6168c12478110e7aa74d5f"), "parentGameId" : ObjectId("5a6168c12478110e7aa74d5d"), "idInGame" : 2, "points" : 0, "__v" : 0 }
{ "_id" : ObjectId("5a6168c12478110e7aa74d61"), "parentGameId" : ObjectId("5a6168c12478110e7aa74d5d"), "idInGame" : 4, "points" : 0, "__v" : 0 }
{ "_id" : ObjectId("5a6168c12478110e7aa74d5e"), "parentGameId" : ObjectId("5a6168c12478110e7aa74d5d"), "idInGame" : 1, "points" : 0, "__v" : 0 }
{ "_id" : ObjectId("5a6168c12478110e7aa74d60"), "parentGameId" : ObjectId("5a6168c12478110e7aa74d5d"), "idInGame" : 3, "points" : 0, "__v" : 0 }
{ "_id" : ObjectId("5a6168c12478110e7aa74d62"), "parentGameId" : ObjectId("5a6168c12478110e7aa74d5d"), "idInGame" : 5, "points" : 0, "__v" : 0 }
>
>
> db.games.find().pretty()
{
"_id" : ObjectId("5a6168c12478110e7aa74d5d"),
"created" : ISODate("2018-01-19T03:40:49.028Z"),
"players" : [
ObjectId("5a6168c12478110e7aa74d62"),
ObjectId("5a6168c12478110e7aa74d5f"),
ObjectId("5a6168c12478110e7aa74d61"),
ObjectId("5a6168c12478110e7aa74d60"),
ObjectId("5a6168c12478110e7aa74d5e")
],
"__v" : 0
}
>
我看不到子组件内部的文本。子级呈现为大小为0x0且为空。 那是由路由器引起的吗? 这是我的代码: App.js: REPODetails.js: 这是child committersCard.js: 我用的是4号路由器。
我是MongoDB的新手,我正在用Mongoose创建一个简单的数据库,模型如下:用户、游戏和玩家。 因此,一个用户不包含或包含多个游戏。每个游戏都有一个玩家,每个玩家都指一个用户。如下所示(为了清晰起见,我简化了模式): 因此,现在在前端,我想向后端发送一份请愿书,为用户Joe(_id:11111)和Bob(_id:22222)创建一个新游戏,因此我向/api/games发送了一篇帖子,帖子的主
我有以下问题: 我有这样一个函数: 我的问题如下:我需要一个解决方案,可以通过addActionListener函数作为参数传递任何对象。列表可在此处找到:https://docs.oracle.com/javase/tutorial/uiswing/events/eventsandcomponents.html 有没有一种方法可以在没有大量实例的情况下解决这个问题? 谢啦
当我对它进行降序排序时,它应该首先显示Parent3,因为它有一个Z。这是我当前的hql,它得到了1>2>3的错误结果: 如果没有distinct,尽管它选择了多个相同的父级,但它仍然很好。 我有一个模型设置如下: 编辑:在集合中按HQL顺序对其进行排序,尽管当双亲具有相同的children.name值时,它不会比较下一个可能的值。即。 如果Parent1有孩子abba,zeon Parent2有
当我读到cascade和inverse时,有人说它们都在做完全不同的事情。级联:在级联中,在一个操作(保存、更新和删除)完成后,它决定是否需要调用其他操作(保存、更新和删除)对其他相互有关系的实体。反向:这用于决定哪一方是管理关系的关系所有者(插入或更新外键列)。 假设我保存有一些孩子的父级。所以当我一方面用inverse="true"cascade="all"设置一对多时,我希望孩子是关系的所有
问题内容: 就像是 这是我想象的格式,但事实并非如此。什么会退回到对象的父级? 问题答案: JavaScript本身不提供此功能。而且我怀疑您是否可以创建这种类型的功能。例如: 鲍比属于谁?