如何在Mongoose.js中实现用户联系信息字段仅可创建一次
解决方案
你现在出现重复添加的核心原因是用户模型里把contact字段定义成了数组类型,自然每次push都会新增一条数据,有两种实现方式可选:
方案1:调整Schema结构(推荐)
你只需要存储1份联系信息,不需要用数组结构,直接修改用户模型里的contact字段定义即可:
// 把原来的数组定义 contact:{ type:[ContactData] } // 修改为单对象结构 contact: { type: ContactData, default: null }
后续更新联系信息直接用$set操作赋值即可,不会出现多份数据:
await User.findOneAndUpdate( { _id: 你的用户ID }, { $set: { contact: 表单提交的联系信息对象 } }, { new: true } )
方案2:保留现有数组结构的实现
如果不想改动现有Schema结构,可以在更新时添加条件判断,仅当contact数组为空的时候才执行插入操作:
await User.findOneAndUpdate( // 仅匹配contact数组为空的用户记录 { _id: 你的用户ID, "contact.0": { $exists: false } }, { $push: { contact: 表单提交的联系信息对象 } }, { new: true } )
"contact.0": { $exists: false }的作用是判断数组不存在第一个元素(即数组为空),满足条件才会执行push,避免重复添加。
另外注意你现有代码里的两处笔误:
- 导出用户模型时引号未闭合:
module.exports = User = mongoose.model('user, UserSchema);需改为module.exports = User = mongoose.model('user', UserSchema); - 引入联系模型时文件名拼写错误:
const ContactData=require('./conatct').schema;需改为const ContactData=require('./contact').schema;
内容的提问来源于stack exchange,提问作者ramanjeet singh
相关产品推荐
相关产品推荐

