Javascript 使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组中

Javascript 使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组中,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在尝试创建一个Mongo文档,然后将文档表单更新为具有附加属性的表单,其中一个具有对象数组 我可以将除对象以外的所有内容保存到地址数组中 以下代码段显示了我当前将对象保存到地址数组的尝试。我觉得我错过了一个我尝试过但语法不正确的推动或转换 猫鼬模式: var UserSchema = new mongoose.Schema({ username: { type: String, lowercase: true } , password: { type: String }

我正在尝试创建一个Mongo文档,然后将文档表单更新为具有附加属性的表单,其中一个具有对象数组

我可以将除对象以外的所有内容保存到地址数组中

以下代码段显示了我当前将对象保存到地址数组的尝试。我觉得我错过了一个我尝试过但语法不正确的推动或转换

猫鼬模式:

var UserSchema = new mongoose.Schema({
     username: { type: String, lowercase: true }
    , password: { type: String }
    , email: { type: String, lowercase: true }
    , phone: { type: String }
    , newsletter: Boolean
    , created: { type: Date, default:   Date.now }
    , address: [{
        nickname: { type: String }
        , streetAddress: { type: String }
        , streetAddress2: { type: String }
        , state: { type: String }
        , zip: { type: String }
    }]    
});
模型方法: 首先,我创建一个帐户。表单只要求输入用户名、电子邮件和密码,然后重定向到jade文件,用户可以在那里填写表单的其余部分

module.exports = exports = function(){
    //create account
    this.createAndSave = function (req, res ) {
        new User({
            username: req.body.username
            , password: req.body.password
            , email: req.body.email
            , phone: req.body.phone
            , address: [{
               nickname: req.body.nickname
               , streetAddress: req.body.streetAddress
               , streetAddress2: req.body.streetAddress2
               , state: req.body.state
               , zip: req.body.zip
            }]
        }).save(function (err, user){
            if (err) throw err;
            req.session.isLoggedIn = true;
            req.session.user = user.username;
            res.redirect('/account/' + user.username)
        })
    }

//update account
this.updateRequest = function (req, res) {
    User.update({username: req.user.username}, {
        username: req.body.username
        , email: req.body.email
        , phone: req.body.phone
        , newsletter: req.body.newsletter
        , address: [{
           nickname: req.body.nickname
           , streetAddress: req.body.streetAddress
           , streetAddress2: req.body.streetAddress2
           , state: req.body.state
           , zip: req.body.zip
        }]
      }, function (err) {
        res.redirect("/account/" + req.body.username);
    });
}
翡翠模板:(我相信这会更干净)

h1编辑用户
#{user}
表单(method=“POST”,action=“/account/{user.username}”)
输入(type=“hidden”,name=“\u method”,value=“PUT”)
.表格组
标签(for=“username”)名称
输入#name.form控件(type=“text”,name=“username”,value=user.username)
.表格组
标签(for=“email”)电子邮件
输入#email.form控件(type=“email”,name=“email”,value=user.email)
.表格组
标签电话
输入#phone.form控件(type=“text”,name=“phone”,value=user.phone)
.表格组
标签时事通讯选择加入/退出
输入#新闻稿(type=“checkbox”,name=“newsletter”,checked=(true==false?“checked”:未定义))
如果(user.address.length>0)
对于(var i=0;i)
.表格组
标签街道地址
输入#address.form控件(type=“text”,name=“streetAddress”,value=user.shippingAddresses[i].streetAddress)
.表格组
标签地址(续)
输入#address2.form控件(type=“text”,name=“streetAddress2”,value=user.shippingAddresses[i].streetAddress2)
.表格组
标签邮政编码
输入#zip.form控件(type=“text”,name=“zip”,value=user.shippingAddresses[i].zip)
其他的
.表格组
标签位置昵称
输入#address.form控件(type=“text”,name=“昵称”,value=)
.表格组
标签街道地址
输入#address.form控件(type=“text”,name=“streetAddress”,value=)
.表格组
标签地址控制。
输入#address2.form控件(type=“text”,name=“streetAddress2”,value=)
.表格组
标签状态
输入#state.form控件(type=“text”,name=“state”,value=)
.表格组
标签邮政编码
输入#zip.form控件(type=“text”,name=“zip”,value=)
按钮(type=“submit”)更新帐户
此外,还有另一种仅用于地址的形式,这就是地址是数组的原因

任何方向都会很有帮助,因为我随时都可能精神错乱。如果您有任何进一步的代码,请告诉我

另外需要注意的是,我无法从update函数获取任何更新的数据来保存到mongo


谢谢

这是我想出的解决办法。我找到要更新的文档并将对象推送到存储数组的属性

示例方法:

this.addAddress = function (req, res) {
    var newAddress = {
           nickname: req.body.nickname,
           streetAddress: req.body.streetAddress,
           streetAddress2: req.body.streetAddress2,
           state: req.body.state,
           zip: req.body.zip
    }
    User.update({username: req.session.user}, { $push : {
            address: newAddress
        }}, {upsert: true}, function ( err ) {
                if(err){
                        console.log(err);
                }else{
                        console.log("Successfully added");
                }
        })
}

这是我想出的解决办法。我找到要更新的文档并将对象推送到存储数组的属性

示例方法:

this.addAddress = function (req, res) {
    var newAddress = {
           nickname: req.body.nickname,
           streetAddress: req.body.streetAddress,
           streetAddress2: req.body.streetAddress2,
           state: req.body.state,
           zip: req.body.zip
    }
    User.update({username: req.session.user}, { $push : {
            address: newAddress
        }}, {upsert: true}, function ( err ) {
                if(err){
                        console.log(err);
                }else{
                        console.log("Successfully added");
                }
        })
}