如何更新 mongodb 对象中另一个嵌套数组的嵌套数组
How to update my nested array of another nested array in object in mongodb
我的问题与这个问题有某种关系LINK。然而这是我的问题..
{
"_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
"comments": [{
"name": "Len",
"_id": ObjectId("6241108375ed952ceb0187e3"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
} {
"name": "Lilipad",
"_id": ObjectId("6241108375ed952ceb0187e5"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
} {
"name": "Leni Robredo",
"_id": ObjectId("6241108375ed952ceb0187e9"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
}
...
]
}
现在,我想在这里发生的是当您收到评论 _id
时,例如 ObjectId("6241108375ed952ceb0187e3")
、ObjectId("6241108375ed952ceb0187e5")
、ObjectId("6241108375ed952ceb0187e9")
。我想为他们每个人更新一组新数据,但我很困惑我将如何与操作员一起做。这就是我的输入和输出的工作方式。
parent_id = ObjectId("4d2d8deff4e6c1d71fc29a07")
sub_id = ObjectId("6241108375ed952ceb0187e5")
new_data = [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
},{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb012131")
}]
输出
{
"_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
"comments": [{
"name": "Len",
"_id": ObjectId("6241108375ed952ceb0187e3"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
} {
"name": "Lilipad",
"_id": ObjectId("6241108375ed952ceb0187e5"),
"new_data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
},{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb012131")
}]
} {
"name": "Leni Robredo",
"_id": ObjectId("6241108375ed952ceb0187e9"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
}
...
]
}
如您所见,我使用 sub_id 来获取要更新其数据的数组项的 ID。因为我可以使用相同的名称但不能使用 ID,所以这就是我使用的原因comments
.
的数组项的 _id
现在如果我想在评论数组的所有 id 中传递新的所有数据..我已经为此准备了一个循环让我们说这样的话。
list_comment_id = [ObjectId("6241108375ed952ceb0187e3"),
ObjectId("6241108375ed952ceb0187e5"),ObjectId("6241108375ed952ceb0187e9")]
parent_id = ObjectId("4d2d8deff4e6c1d71fc29a07")
new_data = [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
},{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb012131")
}]
这样我就可以传递我的 list_comment_id
想要的所有数据..
我已经在我的代码中尝试过类似的东西
router.route('/append/:id').put((req,res) => {
const { _id, sub_id, data} = req.body
const main_id = req.params.id
// Sub_id for comments _id items
COMMENT.updateOne(
{
_id:main_id,
"comments._id" : sub_id
},
{
$set:{
data:data
}
}
).then((comments) => res.json("Likes List People Updated") )
.catch(err => console.log(err))
})
谁能帮帮我谢谢??我将不胜感激。
也许是这样的:
db.collection.update({
_id: ObjectId("4d2d8deff4e6c1d71fc29a07")
},
{
$set: {
"comments.$[x]": {
"name": "Lilipad",
"_id": ObjectId("6241108375ed952ceb0187e5"),
"new_data": [
{
"name": "Len",
"confirmation_likes": "false",
"_id": ObjectId("6241102d75ed952ceb0187dd")
},
{
"name": "Lilipad",
"confirmation_likes": "false",
"_id": ObjectId("6241102d75ed952ceb0187da")
},
{
"name": "Len",
"confirmation_likes": "false",
"_id": ObjectId("6241102d75ed952ceb012131")
}
]
}
}
},
{
arrayFilters: [
{
"x._id": ObjectId("6241108375ed952ceb0187e5")
}
]
})
解释:
创建 arrayFilters x 以识别需要更新的元素并使用必要的值进行更新。
我的问题与这个问题有某种关系LINK。然而这是我的问题..
{
"_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
"comments": [{
"name": "Len",
"_id": ObjectId("6241108375ed952ceb0187e3"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
} {
"name": "Lilipad",
"_id": ObjectId("6241108375ed952ceb0187e5"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
} {
"name": "Leni Robredo",
"_id": ObjectId("6241108375ed952ceb0187e9"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
}
...
]
}
现在,我想在这里发生的是当您收到评论 _id
时,例如 ObjectId("6241108375ed952ceb0187e3")
、ObjectId("6241108375ed952ceb0187e5")
、ObjectId("6241108375ed952ceb0187e9")
。我想为他们每个人更新一组新数据,但我很困惑我将如何与操作员一起做。这就是我的输入和输出的工作方式。
parent_id = ObjectId("4d2d8deff4e6c1d71fc29a07")
sub_id = ObjectId("6241108375ed952ceb0187e5")
new_data = [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
},{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb012131")
}]
输出
{
"_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
"comments": [{
"name": "Len",
"_id": ObjectId("6241108375ed952ceb0187e3"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
} {
"name": "Lilipad",
"_id": ObjectId("6241108375ed952ceb0187e5"),
"new_data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
},{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb012131")
}]
} {
"name": "Leni Robredo",
"_id": ObjectId("6241108375ed952ceb0187e9"),
"data": [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
}]
}
...
]
}
如您所见,我使用 sub_id 来获取要更新其数据的数组项的 ID。因为我可以使用相同的名称但不能使用 ID,所以这就是我使用的原因comments
.
现在如果我想在评论数组的所有 id 中传递新的所有数据..我已经为此准备了一个循环让我们说这样的话。
list_comment_id = [ObjectId("6241108375ed952ceb0187e3"),
ObjectId("6241108375ed952ceb0187e5"),ObjectId("6241108375ed952ceb0187e9")]
parent_id = ObjectId("4d2d8deff4e6c1d71fc29a07")
new_data = [{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187dd")
},{
"name":"Lilipad",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb0187da")
},{
"name":"Len",
"confirmation_likes":"false",
"_id":ObjectId("6241102d75ed952ceb012131")
}]
这样我就可以传递我的 list_comment_id
想要的所有数据..
我已经在我的代码中尝试过类似的东西
router.route('/append/:id').put((req,res) => {
const { _id, sub_id, data} = req.body
const main_id = req.params.id
// Sub_id for comments _id items
COMMENT.updateOne(
{
_id:main_id,
"comments._id" : sub_id
},
{
$set:{
data:data
}
}
).then((comments) => res.json("Likes List People Updated") )
.catch(err => console.log(err))
})
谁能帮帮我谢谢??我将不胜感激。
也许是这样的:
db.collection.update({
_id: ObjectId("4d2d8deff4e6c1d71fc29a07")
},
{
$set: {
"comments.$[x]": {
"name": "Lilipad",
"_id": ObjectId("6241108375ed952ceb0187e5"),
"new_data": [
{
"name": "Len",
"confirmation_likes": "false",
"_id": ObjectId("6241102d75ed952ceb0187dd")
},
{
"name": "Lilipad",
"confirmation_likes": "false",
"_id": ObjectId("6241102d75ed952ceb0187da")
},
{
"name": "Len",
"confirmation_likes": "false",
"_id": ObjectId("6241102d75ed952ceb012131")
}
]
}
}
},
{
arrayFilters: [
{
"x._id": ObjectId("6241108375ed952ceb0187e5")
}
]
})
解释: 创建 arrayFilters x 以识别需要更新的元素并使用必要的值进行更新。