使用javascript数组的适当元素更新mongodb文档中数组的多个元素

发布于 2025-01-15 11:50:24 字数 1478 浏览 5 评论 0原文

我有具有以下结构的对象数组:

const myArr = [{
'name':'question1',
'grade':6
},
{
'name':'question2',
'grade':7
}]

问题集合

{
_id:623749f845844e7d273d801c,
questions:[
{
'name':'question1',
'grade':10,
'someInfo':'blabla',
_id:623749f845844e7d273d801m
},
{
'name':'question2',
'grade':10,
'someInfo':'blabla',
_id:623749f845844e7d273d801a
},
{
'name':'question3',
'grade':10,
'someInfo':'blabla',
_id:623749f845844e7d273d801f
}
]
}

我只想更新我在 myArrquestions 中的所有对象> 数组。所以期望的结果应该是:

{
    _id:623749f845844e7d273d801c,
    questions:[
    {
    'name':'question1',
    'grade':6,
    'someInfo':'blabla',
    _id:623749f845844e7d273d801m
    },
    {
    'name':'question2',
    'grade':7,
    'someInfo':'blabla',
    _id:623749f845844e7d273d801a
    },
    {
    'name':'question3',
    'grade':10,
    'someInfo':'blabla',
    _id:623749f845844e7d273d801f
    }
    ]
}

我发现的到目前为止:

当我使用位置运算符指定问题名称时,我成功更新了等级

    await Prijave.updateOne(
    {
      _id: mongoose.Types.ObjectId(q_id),
      'questions.name': 'question1',
    },
    {
      $set: {
        'questions.$.grade': '10',
      },
    }
  )

但是如何对 myArr 中的每个元素执行此操作?我可以制作 forEach 循环,迭代 myArr 并为每个元素调用 updateOne 但我不认为应该这样做,因为它会使与数据库的多个连接而不是一个。

I have array of objects with following structure:

const myArr = [{
'name':'question1',
'grade':6
},
{
'name':'question2',
'grade':7
}]

Question collection:

{
_id:623749f845844e7d273d801c,
questions:[
{
'name':'question1',
'grade':10,
'someInfo':'blabla',
_id:623749f845844e7d273d801m
},
{
'name':'question2',
'grade':10,
'someInfo':'blabla',
_id:623749f845844e7d273d801a
},
{
'name':'question3',
'grade':10,
'someInfo':'blabla',
_id:623749f845844e7d273d801f
}
]
}

I just want to update all objects in array questions in collection which i have provided in myArr array. So the desired result should be:

{
    _id:623749f845844e7d273d801c,
    questions:[
    {
    'name':'question1',
    'grade':6,
    'someInfo':'blabla',
    _id:623749f845844e7d273d801m
    },
    {
    'name':'question2',
    'grade':7,
    'someInfo':'blabla',
    _id:623749f845844e7d273d801a
    },
    {
    'name':'question3',
    'grade':10,
    'someInfo':'blabla',
    _id:623749f845844e7d273d801f
    }
    ]
}

What i've found so far:

I managed to update grade when i specify the question name with positional operator:

    await Prijave.updateOne(
    {
      _id: mongoose.Types.ObjectId(q_id),
      'questions.name': 'question1',
    },
    {
      $set: {
        'questions.$.grade': '10',
      },
    }
  )

But how to do this for every element in myArr ? I could make forEach loop which iterates through myArrand call updateOne for every element but i dont think it should be done that way because it will make multiple connection to database instead of one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文