Javascript 如何更新mongoose嵌套数组文档

Javascript 如何更新mongoose嵌套数组文档,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我知道这个问题是重复的,但我不知道为什么我被卡住了 问题: 如何使用find by\u id和requirement.update来编辑“requirement.$.update”数组文档(如果需要requirement.\u id) 我的模式 ---------------- namr: String requirement:[{ version: Number, update:[{ date: Date,

我知道这个问题是重复的,但我不知道为什么我被卡住了

问题

如何使用find by
\u id
requirement.update来编辑
“requirement.$.update”
数组文档(如果需要
requirement.\u id

我的模式

----------------
    namr: String
    requirement:[{
        version: Number,
        update:[{
            date: Date,
            number: Number,
            description: String
        }]
    }],
--------

您可以使用下面的查询

db.getCollection("test").updateOne(
  { "name":  req.params.name },
  { "$set": { "requirement.$[outer].update.$[inner].number": 100000 } },
  {
    "arrayFilters": [
      { "outer._id": mongoose.Types.ObjectId(req.params.versionID) },
      { "inner._id": mongoose.Types.ObjectId(req.params.versionNumID) }
    ]
  }
)

解释得很好@AnthonyWinzlet仍然找不到解决方案,你有时间检查吗?你面临什么问题?请更新您的问题,并解释哪些不适合您。更新后,请立即查看@AnthonyWinzletHmm。还有一个人指出了一个现有的答案(第一条评论中的链接),他没有阅读第一段代码以外的内容。如果你真的读了它,那么“第一块”实际上是解释说,使用硬索引值并不是怎么做的。除了MongoDB 3.6可用解决方案之外,另一个响亮的信息是嵌套数组是一个非常糟糕的主意。我建议实际阅读内容,而不仅仅是寻找“cargo cult”的代码。你可能会学到一些有用的东西。另外,请不要在回答其他问题时使用“请帮助”进行评论。我们可以再添加一个级别吗?像1-外,2-内,3-other@BinaraMedawatta如果您还有疑问,请提出新问题
db.getCollection("test").updateOne(
  { "name":  req.params.name },
  { "$set": { "requirement.$[outer].update.$[inner].number": 100000 } },
  {
    "arrayFilters": [
      { "outer._id": mongoose.Types.ObjectId(req.params.versionID) },
      { "inner._id": mongoose.Types.ObjectId(req.params.versionNumID) }
    ]
  }
)