gpt4 book ai didi

node.js - 如何在不使用位置运算符 $ 的情况下更新 mongodb 文档中数组中的嵌套文档?

转载 作者:行者123 更新时间:2023-12-05 05:35:36 28 4
gpt4 key购买 nike

我遇到一个问题,我无法使用位置运算符来更新子文档,因为我使用的 MongoDB 版本 3.2 不支持位置运算符 $,而且我无法将 MongoDB 版本升级到超过3.2 由于支持 32 位 MongoDB

我想把子文档中字段顺序的值改成 bool 值false

[
{
"_id": 1,
"products": {
"books": [
{
"id": 1,
"ordered": true
},
{
"id": 2,
"ordered": false
}
]
}
}
]

如果有 Mongoose 的方法,我将不胜感激

最佳答案

遗憾的是,你无能为力,如果你知道数组的索引,你可以使用它:

db.collection.update({},
{
"$set": {
"products.books.0.ordered": false
}
})

如果你没有,你需要先找到文档,然后更新它:

const doc = await db.collection.findOne({});
if (doc) {
const indexToUpdate = doc.products.items.map((item, index) => ({...item, index})).filter(v => v.item.ordered === true);
if (indexToUpdate.length) {
const setBody = {}
indexToUpdate.forEach((item) => {
const key = `products.books.${item.index}.ordered`
setBody[key] = false;
})
await db.collection.update({},
{
"$set": setBody
})
}
}

关于node.js - 如何在不使用位置运算符 $ 的情况下更新 mongodb 文档中数组中的嵌套文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73474726/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com