【发布时间】:2021-08-01 16:41:09
【问题描述】:
我正在尝试编写一个脚本,它使用 2 个聚合并将结果保存为一个数组以用于 updateMany。
第一个 aggregate 查找包含 firstTrackingId 和 secondTrackingId 的任何文档。我把它保存到一个数组中。此聚合在单独测试时工作正常。
第二个aggregate 将使用第一个聚合的结果数组,从第一个聚合的结果中提取所有具有firstTrackingId 的文档。这将拉出所有没有secondTrackingId 的文档,并将唯一的mongo _id/ObjectId 保存到一个数组中。
updateMany 将使用来自第二个聚合的所有结果来更新所有状态为 void 的相关文档。
当我给它们提供硬编码数据时,所有这些函数都可以工作,但我不知道如何从数组中提取数据。我什至不确定我是否正确地“保存”了它,或者除了将聚合初始化为数组之外我还应该做些什么。
var ids = db.getCollection('Test').aggregate([
{
$match: {
"firstTrackingId": { "$ne": "" },
"secondTrackingId": { "$exists": true }
}
},
{
$group: {
_id: "$firstTrackingId",
}
},
])
var secondIds = db.getCollection('Test').aggregate([
{
$match: {
"firstTrackingId": { $in: ids },
"secondTrackingId": { $exists: false }
}
},
{
$group: {
"_id": "$_id",
}
},
])
db.getCollection('Test').updateMany({
"_id": {
"$in": secondIds
},
}, { $set: {
"status": "VOID"
} })
我尝试将第一个聚合的结果打印出来...无法真正弄清楚如何...所以如果我这样做了第一个:
print(ids.next(ids._id))
我明白了:
[object BSON]
这让我相信我需要以某种方式执行$objectToArray。如果有人有任何见解,那就太棒了。谢谢!
【问题讨论】: