我在猫鼬中遇到了最奇怪的问题。我有以下对象:
var gameInfo = { "id": $scope.gamedata._id, "role": role, "equipment": "", "notes": "" };
我使用Node将其发送到以下函数:
app.put('/userJoin/:userid', function (req, res) {
console.log("app user join data: " + JSON.stringify(req.body));
var userid = req.params.userid;
var u_id = new mongoose.Types.ObjectId(userid);
var query = { _id: u_id };
User.findOne(query).exec(function (err, tempuser) {
console.log(JSON.stringify(tempuser));
if (tempuser.games == null) {
console.log("creating games list");
tempuser.games = [req.body];
tempuser.x = 5;
tempuser.shoes = "red";
console.log("created games list");
}
else {
console.log("adding to games list");
tempuser.games.push(req.body);
}
console.log(JSON.stringify(tempuser));
tempuser.save(function (err) {
if (err) { res.send(err); }
else { res.status(200).end(); }
});
});
});
在其中,我使用User.findone(query)
从我的数据库中检索用户,由于它还没有属性游戏,if
块会触发,我看到creating games list
和{{ 1}}在我的控制台中。但是,我还使用控制台在created games list
块之前和之后进行检查,if
对象根本没有更改。由于我在前后检查,我几乎可以确定故障必须在tempuser
区块内,但我无法弄清楚原因。
编辑:为了澄清,这是服务器端控制台的输出:
if
正如您所看到的,尽管使用点表示法向tempuser添加了三个属性,但没有添加任何属性。
答案 0 :(得分:0)
快步走后,答案突然出现在我脑海中,我已经证实它是正确的。问题在于我对一些Mongoose基础知识缺乏了解,对框架不熟悉。
User.findOne(query).exec(function (err, tempuser)
检索Mongoose模型,而不是普通的javascript对象,正如我所知,模型在创建后不能直接更改(只能更新它们的值)。 games:[]
数组不是模型的一部分,因此我无法添加它。