我试图弄清楚如何$addFields
在用于更新文档的函数中使用该操作。生成该字段的逻辑非常简单,我只需取出数组中的最后一个对象,如下所示:
{
$addFields: { activeWorkflow: { $arrayElemAt: ["$workflow", -1.0] } }
}
现在,我需要弄清楚如何将这种聚合纳入我的更新函数中,其相关代码如下所示:
updatedDoc = await request.findOneAndUpdate(
StaffMember,
{
_id: request.parameters.id
},
req,
{
new: true
}
);
我尝试做的是这样的:
updatedDoc = await request.findOneAndUpdate(
StaffMember,
{
_id: request.parameters.id
},
req,
{
new: true
}
);
await request.aggregate(updatedDoc, [
{
$addFields: { activeWorkflow: { $arrayElemAt: ["$workflow", -1.0] } }
}
]);
...但这给我一个错误:
TypeError:mongooseModelObject.aggregate不是函数
我会像这样将$ addFields运算符与$ set一起使用吗?
updatedDoc = await request.findOneAndUpdate(
StaffMember,
{
_id: request.parameters.id
},
{
$set: {
req,
$addFields: { activeWorkflow: { $arrayElemAt: ["$workflow", -1.0] } }
}
},
{
new: true
}
);
如何将聚合作为此类函数的一部分运行?一个简单的示例将帮助我理解该如何完成-如果确实可以完成。
当然,还有其他方法可以执行此操作,但是我想利用mongo特定的方法来处理此问题,例如使用mongo操作$addFields
。看起来像什么?
顺便说一句,我在聚合中使用的包装函数如下所示:
async aggregate(mongooseModelObject, aggregateObject = {}) {
try {
return await mongooseModelObject.aggregate(aggregateObject).exec();
} catch (err) {
this.sendError(err);
}
}
基本上,您不能将其aggregate
用作更新的一部分。使用更新数据的唯一方法$addFields
是使用$ out,如下所示:
db.col.aggregate([
{ $addFields: { activeWorkflow: { $arrayElemAt: ["$workflow", -1.0] } } },
{ $out: "col" }
])
但这很遗憾会activeWorkflow
为中的所有文档添加col
。
对于常规而言,.update()
您不能引用其他字段,因此对单个文档执行此操作的唯一方法是使用findOne()
获取该文档,然后在应用程序逻辑中添加新字段,然后使用update()
或save()
存储该更新的文档(此处是旧问题)。 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句