【问题标题】:How to update mongoose nested array document [duplicate]如何更新猫鼬嵌套数组文档[重复]
【发布时间】:2019-09-30 08:18:07
【问题描述】:

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

问题

如何使用_idrequirement.update._id 的查找(如果需要requirement._id)编辑"requirement.$.update" 数组文档

// edit version number level2
  exports.editVersionNumberPost = function(req, res){ 
    var query = {
            date: req.body.date,
            number: req.body.number,
            description: req.body.description 
        }
    Project.findOneAndUpdate({ name:  req.params.name, 
                               "requirement._id" : req.params.versionID, 
                               "requirement.update._id" : req.params.versionNumID},  
        {"$set": 
            {"requirement.$.update" :  query 
        }   
        },  { new: true }, 
        function(err, obj){})
 };

我的架构

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

【问题讨论】:

  • 很好解释here
  • @AnthonyWinzlet 仍然找不到解决方案,您有时间检查一下吗?
  • 您面临什么问题?请用一些解释来更新您的问题,以及什么不适合您。
  • 已更新,请立即查看@AnthonyWinzlet
  • 嗯。还有一个人指出了一个现有的答案(第一条评论中的链接),他没有阅读第一块代码。如果您真的阅读它,那么“第一个块”实际上带有使用硬索引值而不是如何做到这一点的解释。除了 MongoDB 3.6 可用的解决方案之外,另一个响亮的信息是 嵌套数组是一个非常糟糕的主意。我建议实际阅读内容,而不仅仅是寻找“货物崇拜”的代码。你可能会学到一些有用的东西。也请不要在回答其他问题时用“请帮助”评论。

标签: javascript node.js mongodb express mongoose


【解决方案1】:

您可以使用以下查询

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) }
    ]
  }
)

【讨论】:

  • 我们也可以再增加一个关卡吗?比如一外二内三其他
  • @BinaraMedawatta 如果您还有其他疑问,请提出新问题
猜你喜欢
  • 2020-08-05
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2015-04-21
相关资源
最近更新 更多