首页 > 解决方案 > 更新 Mongoose 模式数组中的元素

问题描述

我正在尝试更新snippets我的猫鼬模式中的一个元素。

我的猫鼬模式。

const Schema = new mongoose.Schema({
  // ...
  createdAt: Date,
  snippets: {} // here I push ['string..', ['array of strings..']]
})    

snippets这是Compass 中的视图。

在此处输入图像描述

下面代码的问题是它完全擦除了存储的其他元素,除了它的工作原理。无法指定我要更新片段 [0],而不是整个内容..?

User.findOneAndUpdate({ username: req.session.user.username },
  { $set: { snippets: [snippet] } }, callback)

尝试使用findOnesave但它不会更新数据库。

const snippet = [req.body.code, [req.body.tags]]
User.findOne({ username: req.session.user.username }, function (err, fetchedUser) {
  if (err) console.log(err)
  fetchedUser.snippets[req.params.id] = snippet // should be set to new snippet?
  fetchedUser.save(function (err, updatedUser) {
    if (err) console.log(err)
    console.log('edited')
    // ...
  })
})

有什么建议么?

标签: node.jsmongodbmongoose

解决方案


我以为我早些时候尝试过,但显然没有。

使用fetchedUser.markModified('snippets')解决了我的问题findOne/save实际上没有保存到数据库。


推荐阅读