我使用下面的查询使用 $setWindowFields 生成新字段,但它导致内存问题。 需要新的字段来给出数值递增值。 需要新字段来给出数值增量值。
下面的查询给出了内存问题。
{
$lookup: {
from: "employee",
localField: "empId",
foreignField: "_id",
as: "employee",
},
},
{
$unwind: {
path: "$employee",
},
},
{
$lookup: {
from: "student",
localField: "studentId",
foreignField: "_id",
as: "student",
},
},
{
$unwind: {
path: "$student",
},
},
{
$setWindowFields: {
sortBy: {
_id: 1,
},
output: {
incNum: {
$documentNumber: {},
},
},
},
},
{
$addFields: {
incNum: {
$toString: "$incNum",
},
},
},
{
$project: {
incNum: "$incNum",
},
},
在没有看到您的源数据的情况下,我将冒险并根据您所说的内容假设您只想在排序后为每个文档添加增量值。在这种情况下,您可以在
$count
聚合阶段使用 $setWindowFields
。在没有分区的情况下使用,它只会计算文档的数量,因为您没有对它们进行分区,并且每个文档的值都会增加。
希望这有帮助:
db.collection.aggregate([
{
$setWindowFields: {
sortBy: {
_id: 1
},
output: {
incField: {
$count: {},
window: {
documents: [
"unbounded",
"current"
]
}
}
}
}
}
])
请参阅此处,了解包含一些基本示例数据的工作示例。