在猫鼬中仅更改整个嵌入式文档数组的一个字段

Posted

技术标签:

【中文标题】在猫鼬中仅更改整个嵌入式文档数组的一个字段【英文标题】:change only one field of entire array of embedded document in mongoose 【发布时间】:2021-09-25 22:42:33 【问题描述】:

我有一个列表架构和一个问题集架构。 quetsionSet 模式嵌入在列表模式中。它工作正常,但我如何更新嵌入文档数组中的任何内容,即在这里我想更改 questionSet (questionSet 文档数组)中所有文档的 listname

这是我的列表文档模型的示例

 "_id" : ObjectId("60f2cc07275bbb30d8cb268e"), 
"listName" : "dsa", 
"aboutList" : "dsa queestions",
 questionSet" : [  "solved" : false, 
                   "_id" : ObjectId("60f2cc12275bbb30d8cb2695"), 
                    "topic" : "array", 
                     "name" : "array is best", 
                    "url" : "www.arr.com", 
                       "listname" : "dsa", 
                     "__v" : 0 , 
                "solved" : false,  
                 "_id" : ObjectId("60f2cc1b275bbb30d8cb269d"), 
                "topic" : "linked list",
               "name" : "reverse list", 
                 "url" : "www.list.com",
                "listname" : "dsa",
                 "__v" : 0  
               ], 
"__v" : 2 

【问题讨论】:

这能回答你的问题吗? Mongoose, update values in array of objects 兄弟,我试过了,但它仍然没有更新所有文档,只是更新了它找到的第一个文档,我尝试使用 update many 但没有效果 【参考方案1】:

您可以在您的情况下使用以下内容

db.<collection_name>.updateOne(
       "_id" : ObjectId("60f2cc07275bbb30d8cb268e"),
    
      $set: 
        'questionSet.$[].listname': "javascript"
      
     
  )

【讨论】:

谢谢兄弟。顺便说一句,如果我想更新表单提供的字段(我正在使用 req.body 并将其存储在一个对象中并删除所有留空的字段)那么我该如何更新对象中存在的字段应该是就像里面 $set "questionSet" : myObject 还是什么? 是的,应该工作,你应该尝试和测试,顺便说一句,如果你觉得答案有用,请给答案投票 好的,谢谢兄弟。我试过了,它工作正常,但如果我只传递 2/3 个字段,它会删除第 3 个字段,如果我传递 1 个字段,它会从数据库中删除其余 2 个字段,所以有什么解决办法吗? 不清楚问题,顺便试试google 那里有很多答案?

以上是关于在猫鼬中仅更改整个嵌入式文档数组的一个字段的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在猫鼬中获取子文档?

如何仅在猫鼬中获取子文档?

如何在猫鼬中保存子文档的数组?

如何在猫鼬的嵌入式文档中填充字段?

如何通过填充字段在猫鼬中查找文档?

如何通过填充字段在猫鼬中查找文档?