我是MongoDB初学者。我有一个集合,我想在其中从一个文档中查找并拉取一个项目,并将其推送到同一集合中的另一个匹配文档。
给定:将带有orderNumber: 100
和itemId:I000007
的项目移动到orderNumber:102
项目数组
下面是订单集合。
/* 1 */
{
"_id" : ObjectId("61264e2dc0e8b5b3daa16c9a"),
"orderNumber" : "100",
"__v" : 0,
"items" : [
{
"itemId" : "I000005",
"region" : [
"US",
"EUROPE"
]
},
{
"itemId" : "I000006",
"region" : []
},
{
"itemId" : "I000007",
"region" : [
"JAPAN"
]
}
]
}
/* 2 */
{
"_id" : ObjectId("61268283c0e8b5b3daa1f245"),
"orderNumber" : "101",
"__v" : 0,
"items" : [
{
"itemId" : "I000008",
"region" : []
}
]
}
/* 3 */
{
"_id" : ObjectId("61268283c0e8b5b3daa1fg3c"),
"orderNumber" : "102",
"__v" : 0,
"items" : [
{
"itemId" : "I000009",
"region" : []
}
]
}
执行查询后,我想要以下结果。
/* 1 */
{
"_id" : ObjectId("61264e2dc0e8b5b3daa16c9a"),
"orderNumber" : "100",
"__v" : 0,
"items" : [
{
"itemId" : "I000005",
"region" : [
"AMRS",
"APAC"
]
},
{
"itemId" : "I000006",
"region" : []
}
]
}
/* 2 */
{
"_id" : ObjectId("61268283c0e8b5b3daa1f245"),
"orderNumber" : "101",
"__v" : 0,
"items" : [
{
"itemId" : "I000008",
"region" : []
}
]
}
/* 3 */
{
"_id" : ObjectId("61268283c0e8b5b3daa1fg3c"),
"orderNumber" : "102",
"__v" : 0,
"items" : [
{
"itemId" : "I000009",
"region" : [],
},
{
"itemId" : "I000007",
"region" : [
"JAPAN"
]
}
]
}
您必须执行两个查询才能执行操作,
0)预先需要的东西:
let pullOrderNumber = "100";
let itemId = "I000007";
let pushOrderNumber = "102";
1)使用条件从项目
数组中提取项目:
findOneAndUpdate
方法,我们需要该项目推送另一个文档let oldDoc = await Model.findOneAndUpdate(
{ orderNumber: pullOrderNumber },
{
$pull: {
items: { itemId: itemId }
}
}
);
游乐场
2)从上述结果文档中筛选并找到被移除的item对象
let pushItem = oldDoc.items.find(i => i.itemId == itemId);
3)将上面拉取的项目推送到另一个文档中
await Model.updateOne(
{ orderNumber: pushOrderNumber },
{
$push: {
items: pushItem
}
}
);
游乐场