如何更新猫鼬嵌套数组文档[重复]

Posted

技术标签:

【中文标题】如何更新猫鼬嵌套数组文档[重复]【英文标题】: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 可用的解决方案之外,另一个响亮的信息是 嵌套数组是一个非常糟糕的主意。我建议实际阅读内容,而不仅仅是寻找“货物崇拜”的代码。你可能会学到一些有用的东西。也请不要在回答其他问题时用“请帮助”评论。 【参考方案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 如果您还有其他疑问,请提出新问题

以上是关于如何更新猫鼬嵌套数组文档[重复]的主要内容,如果未能解决你的问题,请参考以下文章

更新猫鼬中的嵌套模式[重复]

在猫鼬中更新它们时如何访问每个文档字段[重复]

猫鼬:更新字段,将对象推送到数组中[重复]

更新数组mongodb内的嵌套数组[重复]

如何在猫鼬中更新嵌套数组值

使用数组过滤器更新多个嵌套数组在猫鼬中不起作用