10
我試圖將一個十六進制字符串轉換爲聚合查詢中的等價ObjectID。我嘗試了兩種不同的方法:在使用方法MongoDB彙總項目字符串到ObjectId
db.omvas.aggregate([
{$project:{
EID:{$let: {
vars: {
id: "$EID"
},
in: ObjectId("$$id")
}},
}
},
{$group:{
_id:"$EID"
}
}
]);
和
db.omvas.aggregate([
{$project:{
EID: ObjectId("$EID")
}
},
{$group:{
_id:"$EID"
}
}
]);
我不斷收到錯誤 「長度錯誤:無效的對象ID」。我測試了添加一個文字字符串來代替聚合變量,並且我得到了一個合適的ObjectID的結果。似乎字符串值沒有被傳遞給Mongo的ObjectId函數,而是變量名作爲文字字符串被傳遞。
任何人有任何想法,如果我想完成是可能的?有沒有我失蹤的魔法?
謝謝,這很有道理。這個特定的查詢只是報告工作流程中的一個階段。 ObjectId是必需的,因爲它正在被管道下方的查詢使用。我正在重新思考他們現在的工作方式,並認爲我有更好的方式來執行它們。 – StevenWarren
在我的情況下,我想做'$ lookup',其中本地字段是ObjectId的字符串表示,而外部字段是實際的ObjectId。任何想法,如果這是可能的MongoDB 3.2? – Madbreaks
解決方法是編寫一個腳本,將包含該id的新字段作爲ObjectId添加到集合中的文檔。然後使用新字段進行$查找。 –