Javascript MongoDB未在node.js应用程序中更新?
我正在尝试更新node.js应用程序中的数据库,但它不起作用。I console.记录参数并正确显示(即品牌、尺寸和用户电子邮件均有效且已定义)。我该怎么做 正在调用的控制器中的函数:Javascript MongoDB未在node.js应用程序中更新?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在尝试更新node.js应用程序中的数据库,但它不起作用。I console.记录参数并正确显示(即品牌、尺寸和用户电子邮件均有效且已定义)。我该怎么做 正在调用的控制器中的函数: var User = require('../models/user'); exports.addToFavs = function(req, res) { var user=req.user; var brandToFind = req.body.brand;
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
的文档。换句话说,查找子文档中没有密码的文档。你想要的是:
User.update({"local.email": email_user}, ...
该*将文档中的email
字段与匹配值相匹配,而不管子文档中还有哪些其他字段。有关更多信息,请仔细阅读手册部分,直到您熟悉各种查询表单
第二件潜在的事情可能不是从你发布的代码中马上就能看出来的,那就是你对猫鼬的使用。这是一个陷阱,对于联合国发起的和那些仍然以关系的方式思考的人来说
您显示了您的模式定义,但除非您仅使用一个模型(仅针对用户
),否则您尝试执行的操作将不起作用。原因是,在单一模型表单中,您的相关模式被认为适合您正在执行的更新操作
但是,如果您为shoeSchema
和searchSchema
中的每一个定义了一个模型,那么这些文档实际上将在单独的集合中创建,并且这种类型的更新将不起作用
在后一种情况下,返回到,熟悉概念,重新思考并再次实现您的逻辑。我不使用mongoose,但是您的shoeSchema和searchSchema应该在userSchema之前,因为favorite_shoes:[shoeSchema]
非常favorite_shoes:[未定义]
我这样做了,它仍然不起作用。