Mongodb Mongoose更新整个嵌套元素
我正在使用mongoose和MongoDB。是否有任何方法可以更新架构中的整个计划数组?还是必须使用for循环并逐个插入? My req.body是一个数组,用于替换整个schedules数组对象Mongodb Mongoose更新整个嵌套元素,mongodb,mongoose,Mongodb,Mongoose,我正在使用mongoose和MongoDB。是否有任何方法可以更新架构中的整个计划数组?还是必须使用for循环并逐个插入? My req.body是一个数组,用于替换整个schedules数组对象 [{"_id":"1","description":"hi","time":"Jul 29, 2020 8:55 PM","url":"aaa.com&
[{"_id":"1","description":"hi","time":"Jul 29, 2020 8:55 PM","url":"aaa.com"},{"_id":"2","description":"hi","time":"Jul 29, 2020 8:58 PM","url":"bbb.com"},{"_id":"3","description":"hi"}]
这是我的模式
const schedule = new mongoose.Schema({
user_id: Number,
schedules: [{
description: String,
time: String,
url: String
}]
});
谢谢。您可以使用$set更新整个计划数组,请尝试以下操作:
db.collection.update({query},{ $set: { schedules: req.body } },{option});
在这里,您的req.body应该是具有与模式中定义的相同键的数组。如果您使用mongoose,我们可以避免使用
$set
@jitendra的答案是一个纯mongodb查询,您可以在MongoShell中运行它
你可以参考这个链接。
正如链接所说
var query = { name: 'borne' };
Model.findOneAndUpdate(query, { name: 'jason bourne' }, options, callback)
// is sent as
Model.findOneAndUpdate(query, { $set: { name: 'jason bourne' }}, options, callback)
这有助于防止意外地用{name:'jasonbourne'}覆盖您的文档
所以在你的情况下,我们只需要写:
Schedule.findOneAndUpdate({u id:{u对象的id},{schedules:req.body})代码>
那应该对你有用。但在内部,正如doc所说,它被发送为:
Schedule.findOneAndUpdate({u id:{u对象的id},{$set:{schedules:req.body}})
当然,这假定您的req.body
仅由计划数组组成。很可能是从前端将其作为对象发送,因此可能是req.body.object\u name
。由你决定