gpt4 book ai didi

mongodb - 在 MongoDB 中使用 $addFields 作为更新函数的一部分

转载 作者:行者123 更新时间:2023-12-03 23:14:51 24 4
gpt4 key购买 nike

我想弄清楚如何使用 $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 is not a function



我会像这样将 $addFields 运算符与 $set 一起使用吗?
updatedDoc = await request.findOneAndUpdate(
StaffMember,
{
_id: request.parameters.id
},
{
$set: {
req,
$addFields: { activeWorkflow: { $arrayElemAt: ["$workflow", -1.0] } }
}
},
{
new: true
}
);

如何将聚合作为这样的函数的一部分运行?一个简单的例子将帮助我理解这需要如何完成——如果确实可以做到的话。

当然,还有其他方法可以做到这一点,但我想利用 mongo 特定的方式来处理这个问题,使用像 $addFields 这样的 mongo 操作。 .这会是什么样子?

顺便说一句,我与聚合一起使用的包装器函数如下所示:
  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()存储更新的文档(旧问题 here)。

关于mongodb - 在 MongoDB 中使用 $addFields 作为更新函数的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53072316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com