Javascript 添加到父对象的Mongoose子对象未正确保存
我有一个名为Players的模式和另一个名为Game的模式。每个游戏都有一个名为players的属性,它是对玩家对象的引用数组 博弈模式Javascript 添加到父对象的Mongoose子对象未正确保存,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我有一个名为Players的模式和另一个名为Game的模式。每个游戏都有一个名为players的属性,它是对玩家对象的引用数组 博弈模式 let GameSchema = new mongoose.Schema({ players: [{ ref: "Player", type: mongoose.Schema.Types.ObjectId, }], created: { type: Date,
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路线上初始化游戏和玩家的代码。我在用快车
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");
}
});
}
});
}
}
});
});
}
游戏和玩家之间存在不匹配,我觉得错误在于添加新玩家后保存新游戏。奇怪的是_v属性按预期读取5。你能给我指一下修复这个错误的方向吗
谢谢在代码中保存游戏文档时出现错误 使用带有push的update方法来添加玩家的ObjectID,而不是保存
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") } }, {})
mongo 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
}
>
> 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
}
>