[英]MongoDB not updating in node.js app?
我正在尝试在node.js应用程序中更新数据库,但是它不起作用。 我用console.log'ed了参数,然后正确显示了这些参数(即品牌,大小和用户电子邮件均有效且已定义)。 我该如何工作?
控制器内被调用的功能:
var User = require('../models/user');
exports.addToFavs = function(req, res) {
var user=req.user;
var brandToFind = req.body.brand;
var size_result = req.body.size;
var email_user = user.local.email;
//res.send? local.email?
User.update({local: {email: email_user}} , {$set: { $push: { favorite_shoes: { brand: brandToFind, size: size_result}}}} , {multi : true}, function(error) {
if (error) console.log(error);
console.log('Added %s with size=%s', brandToFind, size_result);
console.log(User.find(email_user));
res.redirect('/favorites');
})
};
架构:
var userSchema = mongoose.Schema({
local : {
email : String,
password : String,
},
favorite_shoes : [shoeSchema],
history: [searchSchema],
});
var shoeSchema = mongoose.Schema({
brand: String,
size: String,
});
var searchSchema = mongoose.Schema({
brand_original: String,
brand_result: String,
size: String,
});
您的发现中有一个明显的问题,可能还有另一个。 这一点是错误的:
User.update({local: {email: email_user}}, ...
这是错误的,因为您指定的方式是它正在寻找一个与您查询的内容完全匹配的local
文档。 换句话说,在子文档中查找也没有password
字段的文档。 您想要的是:
User.update({"local.email": email_user}, ...
* 将使文档中的email
字段与匹配值匹配,而不管子文档中还有哪些其他字段。 有关更多信息,请充分阅读手册部分,直到您熟悉各种查询形式。
http://docs.mongodb.org/manual/tutorial/query-documents/
可能不会从您发布的代码是一目了然的第二个潜在的事情是与您使用猫鼬的。 对于那些没有头脑的人和仍在思考关系的人来说,这是一个陷阱。
您显示了架构定义,但是除非仅使用一种模型(仅适用于User
),否则您尝试执行的操作将无法进行。 原因是,在单一模型形式中,您的相关架构被认为是适合您正在执行的更新操作的嵌入式文档 。
但是,如果您为shoeSchema
和searchSchema
分别定义了一个模型,则这些文档实际上将在单独的集合中创建,并且这种类型的更新将不起作用。
在后一种情况下,请返回文档 ,熟悉概念,重新考虑并再次实现您的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.