【问题标题】: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 但没有效果

标签: javascript node.js database mongodb mongoose


【解决方案1】:

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

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

【讨论】:

  • 谢谢兄弟。顺便说一句,如果我想更新表单提供的字段(我正在使用 req.body 并将其存储在一个对象中并删除所有留空的字段)那么我该如何更新对象中存在的字段应该是就像里面 $set "questionSet" : myObject 还是什么?
  • 是的,应该工作,你应该尝试和测试,顺便说一句,如果你觉得答案有用,请给答案投票
  • 好的,谢谢兄弟。我试过了,它工作正常,但如果我只传递 2/3 个字段,它会删除第 3 个字段,如果我传递 1 个字段,它会从数据库中删除其余 2 个字段,所以有什么解决办法吗?
  • 不清楚问题,顺便试试google 那里有很多答案?
猜你喜欢
  • 2012-02-15
  • 2015-04-21
  • 2021-10-17
  • 2012-04-29
  • 2012-05-11
  • 2017-02-10
  • 1970-01-01
  • 2021-07-26
  • 2015-08-14
相关资源
最近更新 更多