我正在尝试编写一个脚本,该脚本使用 2 个聚合并将结果保存为用于 updateMany
的数组。
第一个 aggregate
查找任何包含 firstTrackingId
和 secondTrackingId
的文档。我将它保存到一个数组中。单独测试时,该聚合可以正常工作。
第二个 aggregate
将使用第一个聚合的结果数组,从第一个聚合的结果中提取所有具有 firstTrackingId
的文档。这将提取任何没有 secondTrackingId
的文档,并将唯一的 mongo _id
/ObjectId
保存到一个数组中。
updateMany
将使用第二次聚合的所有结果来更新状态为无效的所有相关文档。
当我给它们硬编码数据时,所有这些函数都可以工作,但我不知道如何从数组中提取数据。我什至不确定我是否正确地“保存”了它,或者除了将聚合初始化为数组之外我还应该做些什么。
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
。如果有人有任何见解,那就太棒了。谢谢!