是否有一种快速有效的方法可以根据属性复制mongo db集合中的元素。在下面的示例中,我尝试基于jobId复制元素。 我正在使用Spring启动,因此任何使用Spring启动API的示例都会更有帮助。
Original Collection
{ _id: 1, jobId: 1, product: "A"},
{ _id: 2, jobId: 1, product: "B"},
{ _id: 3, jobId: 1, product: "C"},
重复后
{ _id: 1, jobId: 1, product: "A"},
{ _id: 2, jobId: 1, product: "B"},
{ _id: 3, jobId: 1, product: "C"},
{ _id: 4, jobId: 2, product: "A"},
{ _id: 5, jobId: 2, product: "B"},
{ _id: 6, jobId: 2, product: "C"},
答案 0 :(得分:1)
您可以使用以下聚合:
db.col.aggregate([
{
$group: {
_id: null,
values: { $push: "$$ROOT" }
}
},
{
$addFields: {
size: { $size: "$values" },
range: { $range: [ 0, 3 ] }
}
},
{
$unwind: "$range"
},
{
$unwind: "$values"
},
{
$project: {
_id: { $add: [ "$values._id", { $multiply: [ "$range", "$size" ] } ] },
jobId: { $add: [ "$values.jobId", "$range" ] },
product: "$values.product",
}
},
{
$sort: {
_id: 1
}
},
{
$out: "outCollection"
}
])
这里的算法很简单:我们想迭代两组:
Double unwind生成尽可能多的文档。然后,每个_id的公式如下:_id = _id + range * size
。最后一步是将聚合输出重定向到您的集合。