如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组
Posted
技术标签:
【中文标题】如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组【英文标题】:How to append data to existing array in mongodb in MERN stack 【发布时间】:2020-11-08 22:23:19 【问题描述】: 我有一个看起来像这样的现有数组
_id: 5f14675a4fb8565fb89ec338,
name: 'sample5',
email: 'sample5@test.com',
rollno: 9,
city: [
_id: 5f14675a4fb8565fb89ec339,
cityname: 'Sample City 1',
citycode: '000000'
],
__v: 0
所以我想将数据附加到现有数组中
city: [
_id: 5f14675a4fb8565fb89ec339,
cityname: 'Sample City 2',
citycode: '000002'
],
所以我的最终数据库应该是这样的
_id: 5f14675a4fb8565fb89ec338,
name: 'sample5',
email: 'sample5@test.com',
rollno: 9,
city: [
_id: 5f14675a4fb8565fb89ec339,
cityname: 'Sample City 1',
citycode: '000000'
,
_id: 5f14675a4fb8565fb89ec339,
cityname: 'Sample City 2',
citycode: '000002'
,
],
__v: 0
目前,我只能更新现有数据,其中显示 cityname
和 citycode
,如果用户进行任何更改,它会反映在数据库中。
我用来更新数据库的代码
// Update Student
router.route('/update-student/:id').put((req, res, next) =>
studentSchema.findByIdAndUpdate(req.params.id,
$set: req.body
, (error, data) =>
if (error)
return next(error);
console.log(error)
else
// $push:
res.json(data)
console.log('Student updated successfully !')
//
)
)
架构结构
let studentSchema = new Schema(
name:
type: String
,
email:
type: String
,
rollno:
type: Number
,
city: [
cityname: type: String,
citycode: type: String,
],
,
collection: 'students'
)
然后在路由中使用$push
方法更新
// Update Student
router.route('/update-student/:id').put((req, res, next) =>
studentSchema.findByIdAndUpdate(req.params.id,
$push: req.body
, (error, data) =>
if (error)
return next(error);
console.log(error)
else
// $push:
res.json(data)
console.log('Student updated successfully !')
//
)
)
输出
[_id: "5f12e5158be2503422bf6982", name: "sample1", email: "sample1@test.com", rollno: 1,…,…]
0: _id: "5f12e5158be2503422bf6982", name: "sample1", email: "sample1@test.com", rollno: 1,…
city: [_id: "5f146fb84fb8565fb89ec33c", cityname: "city3", citycode: "12345",…]
0: _id: "5f146fb84fb8565fb89ec33c", cityname: "city3", citycode: "12345"
citycode: "12345"
cityname: "city3"
_id: "5f146fb84fb8565fb89ec33c"
1: _id: "5f15301f67c1992f4a233f77", cityname: "new city", citycode: "new code"
citycode: "new code"
cityname: "new city"
_id: "5f15301f67c1992f4a233f77"
email: "sample1@test.com"
name: "sample1"
rollno: 1
__v: 0
_id: "5f12e5158be2503422bf6982"
【问题讨论】:
【参考方案1】:查看This 答案,您可能需要在查询中使用$push
来实现您想要的。
【讨论】:
我已经使用$push
查询更新了我的帖子。但是这些值没有保存到数据库中。
您是否按照他在帖子中的说明进行操作?他还提到了schema的一些变化,你经历过吗?谢谢【参考方案2】:
解决方案
单击提交按钮时。数组以这种方式存储在城市中,因为模式是这样的。这个架构结构就在上面。然后使用 axios 将其传递给数据库。
onSubmit(e)
e.preventDefault()
const studentObject =
city: [cityname: this.state.cityname, citycode: this.state.citycode]
;
axios.put('http://localhost:4000/students/update-student/' + this.props.match.params.id, studentObject)
.then((res) =>
console.log(res.data)
console.log('Student successfully updated')
).catch((error) =>
console.log(error)
)
// Redirect to Student List
this.props.history.push('/student-list')
【讨论】:
以上是关于如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组的主要内容,如果未能解决你的问题,请参考以下文章