【问题标题】:Field duplicating in Mongo when editing page, only one fieldMongo编辑页面时字段重复,只有一个字段
【发布时间】:2017-01-16 10:42:22
【问题描述】:

我有一个更新用户信息的页面,当我在页面上编辑任何其他内容时,它编辑得很好并正确显示。但是在城市部分,它只是附加到字段而不是更新它。所以我得到了很多城市而不是一个!

前端形式:

<form action ="/user/<%= user._id %>/?_method=PUT" method="POST">

<section class="side_nav_content">

                <section id="name_and_address_section" class="col-md-4">
                    <div class="form-group">
                        <label for="username">Username</label>
                        <input class="form-control" id="username" type="text" name="user[username]" placeholder="Username" value ="<%= user.username %>">
                    </div>
                    <div class="form-group">
                        <label id="nickname">Nickname</label>
                        <input class="form-control" id="nickname" type="text" name="user[profile.nickname]" placeholder="Nickname" value="<%= user.profile.nickname %>">
                    </div>
                    <div class="form-group">
                        <label id="email">Email</label>
                        <input class="form-control" id="email" type="email" name="user[email]" placeholder="Email@wherever.com" value="<%= user.email %>">
                    </div>
                    <div class="form-group">
                        <label id="first">First Name</label>
                        <input class="form-control" id="first" type="text" name="user[name][first]" placeholder="First Name" value="<%= user.name.first %>">
                    </div>
                    <div class="form-group">
                        <label id="middle">Middle Name</label>
                        <input class="form-control" id="middle" type="text" name="user[name][middle]" placeholder="Middle Name" value="<%= user.name.middle %>" >
                    </div>
                    <div class="form-group">
                        <label id="last">Last Name</label>
                        <input class="form-control" type="text" name="user[name][last]" placeholder="Last Name" value="<%= user.name.last %>">
                    </div>
                    <div class="form-group">
                        <label id="address">Street Address</label>
                        <input class="form-control" id="address" type="text" name="user[address]" placeholder="Street Address" value="<%= user.address %>">
                    </div>
                    <div class="form-group">
                        <label id="city">City</label>
                        <input class="form-control" id="city" type="text" name="user[city]" placeholder="City" value="<%= user.city %>">
                    </div>
                    <div class="form-group">
                        <label id="zip">Zip Code</label>
                        <input class="form-control" id="zip" type="number" name="user[zipCode]" placeholder="Zip Code" value="<%= user.zipCode %>">
                    </div>
                    <button class="btn btn-lg btn-default btn-primary">Save</button>
                    <a href="/dashboard" class="btn btn-lg btn-info">Cancel</a>
                </section>

路线如下:

router.put("/user/:id", isLoggedIn, function(req,res){
console.log(req.user.username);
User.findByIdAndUpdate(req.user.id,
    {$set: req.body.user},
    {save: true, upsert: true, runValidators: true, new: true}, function(err, updatedUser) {
        if (err) {
            console.log(err);
        } else {
            console.log(updatedUser.username);
            res.render("admin", {user: updatedUser});
        }
    })
});

这是用户架构:

const userSchema = new mongoose.Schema({
username: {type:String, required: true, unique: true},
email: {type: String, required: false, unique: false},
password: { type: String, required: true},
resetPasswordToken: String,
resetPasswordExpires: Date,
profile: {picture: String, nickname: String},
permission:{app: Number}, //This will tell the app what level, 0 for Admin, 1 for User
name: {
    first:String,
    middle:String,
    last:String,
    other: {
        startDate: Date,
        endDate: Date,
        first: String,
        middle: String,
        last: String
    }
},
lastName: String,
address: String,
city: String,
state: String,
zipCode: Number,
phone: Number,
birthday: Date,
birthplace: String,
userCover: String,
categories: Array,
defaultPermission: Number,
events: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Event"
}],
moments: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Moments"
}],
instants: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Instant"
}],
groups: [
    {family:{
    type: mongoose.Schema.Types.ObjectId,
    ref: "User"}
    },
     {friends:{
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    }
    },
    {colleagues:{
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    }
    }],
likedMoments: [{ //This is for what this person likes, so they can refer later
    type: mongoose.Schema.Types.ObjectId,
    ref: "Moments"
}],
likedEvents: [{  //This is for what this person likes, so they can refer later
    type: mongoose.Schema.Types.ObjectId,
    ref: "Event"
}],
favoriteEvents: [{ //This is for personal events that are favorited
type: mongoose.Schema.Types.ObjectId,
ref: "Event"
}],
favoriteMoments: [{  //This is for personal moments that are favorited
    type: mongoose.Schema.Types.ObjectId,
    ref: "Moments"
}]
})

数据只会添加到city,但它只会更新任何其他字段,我不确定该怎么做,因为我对城市没有任何不同。如您所见,我只是一次更新整个文档?

【问题讨论】:

  • 控制台是否显示任何错误?你能分享一下用户架构吗?
  • 我已经用架构更新了 OP。我没有看到任何错误
  • 您将值 req.body.user 传递给 $set。在您的表格中,我没有看到任何 user 的内容。您是否使用客户端 javascript 函数在请求正文中设置 user 的值?您是否检查过这些值是否设置正确(以匹配userSchema 的结构)?
  • 查看 div 中的 name 属性,它们是 name[username] 等等......所有这些都显示在 req.body.user 中
  • 我刚刚注意到一个错误,我输入了name[username] 它实际上是user[username]

标签: node.js mongodb


【解决方案1】:

我在页面的另一部分有一个输入,其中引用了 user[city] 并再次保存。所以它被填充在那里,保存时保存了第一个字段的旧值和新值!

也许这会对将来遇到类似问题的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2013-09-10
    相关资源
    最近更新 更多