Mongodb 从子文档嵌套数组中聚合 N 个随机项
Mongodb aggregation N random item from subdocument nested array
大家好,
我正在尝试 return 从聚合管道中的嵌套数组中提取一些 n 个随机项,但是,我似乎无法弄清楚。 mongodb 中关于 random 的所有文档都处于文档级别,$sample 将 return 一些基于定义的样本大小的文档。我想 return 从一个文档中的数组中获取 n 个随机数,然后在后续阶段执行 $lookup 阶段。下面的例子。
这是文档
{
_id: "61005f388308a717883ad3d2",
...................
...................
"productLine": {
"product": [
"5fefa2556308ab102854baf7",
"5fefa2556308ab102854baf8",
"5fefa2556308ab102854baf9",
"5fefa2556308ab102854bafc",
"5fefa2556308ab102854bag7",
"5fefa2556308ab102854bah8",
"5fefa2556308ab102854bac5",
"5fefa2556308ab102854babc"
],
"created_count": 4,
"purchased": [],
"purchased_count": 0,
},
"following": {
"users": [],
"count": 0
},
"followers": {
"users": [],
"count": 0
},
"product_picture": "xxxxxxxxx",
....................
....................
....................
"__v": 0
}
所以在本文档中,我在 productLine 中有 4 个产品 ID,我希望能够创建一个阶段 select 随机其中的 2 个,以便在接下来的阶段我可以执行 $查找这些 ID。所以基本上在舞台之后,文档看起来像这样。
{
_id: "61005f388308a717883ad3d2",
...................
...................
"productLine": {
"product": [
"5fefa2556308ab102854baf8", // this would be chosen at random
"5fefa2556308ab102854baf9", // this would be chosen at random
],
"created_count": 4,
"purchased": [],
"purchased_count": 0,
},
"following": {
"users": [],
"count": 0
},
"followers": {
"users": [],
"count": 0
},
"product_picture": "xxxxxxxxx",
....................
....................
....................
"__v": 0
}
想法是当用户 select 产品线时,它将 return 来自该产品线的两个随机产品。
任何帮助将不胜感激!!!
您可以在 $lookup
的子流水线中执行 $sample
。
{
"$lookup": {
"from": "product",
"pipeline": [
{
"$project": {
_id: 1
}
},
{
"$sample": {
"size": 4
}
}
],
"as": "productLookup"
}
}
这里是Mongo playground供大家参考。
大家好,
我正在尝试 return 从聚合管道中的嵌套数组中提取一些 n 个随机项,但是,我似乎无法弄清楚。 mongodb 中关于 random 的所有文档都处于文档级别,$sample 将 return 一些基于定义的样本大小的文档。我想 return 从一个文档中的数组中获取 n 个随机数,然后在后续阶段执行 $lookup 阶段。下面的例子。
这是文档
{
_id: "61005f388308a717883ad3d2",
...................
...................
"productLine": {
"product": [
"5fefa2556308ab102854baf7",
"5fefa2556308ab102854baf8",
"5fefa2556308ab102854baf9",
"5fefa2556308ab102854bafc",
"5fefa2556308ab102854bag7",
"5fefa2556308ab102854bah8",
"5fefa2556308ab102854bac5",
"5fefa2556308ab102854babc"
],
"created_count": 4,
"purchased": [],
"purchased_count": 0,
},
"following": {
"users": [],
"count": 0
},
"followers": {
"users": [],
"count": 0
},
"product_picture": "xxxxxxxxx",
....................
....................
....................
"__v": 0
}
所以在本文档中,我在 productLine 中有 4 个产品 ID,我希望能够创建一个阶段 select 随机其中的 2 个,以便在接下来的阶段我可以执行 $查找这些 ID。所以基本上在舞台之后,文档看起来像这样。
{
_id: "61005f388308a717883ad3d2",
...................
...................
"productLine": {
"product": [
"5fefa2556308ab102854baf8", // this would be chosen at random
"5fefa2556308ab102854baf9", // this would be chosen at random
],
"created_count": 4,
"purchased": [],
"purchased_count": 0,
},
"following": {
"users": [],
"count": 0
},
"followers": {
"users": [],
"count": 0
},
"product_picture": "xxxxxxxxx",
....................
....................
....................
"__v": 0
}
想法是当用户 select 产品线时,它将 return 来自该产品线的两个随机产品。
任何帮助将不胜感激!!!
您可以在 $lookup
的子流水线中执行 $sample
。
{
"$lookup": {
"from": "product",
"pipeline": [
{
"$project": {
_id: 1
}
},
{
"$sample": {
"size": 4
}
}
],
"as": "productLookup"
}
}
这里是Mongo playground供大家参考。