0
我已經創建了這個URI集合和一個讓我傳遞URI和httpMethod的函數,它構建了一個MongoDB查詢來查找匹配的文檔。美中不足的是,這些URI可以在他們的動態元素......像這樣:MongoDB與條件完全匹配
/api/v1/users/{userid}/profile
但也可以是URI是這樣的:
/api/vi/users/all/
我在收集阻擋了我的URI,所以我寫了這個Mongo查詢:
db.apis.aggregate({
"$match" : {
"$and" : [
{"$or" : [{"_uri_.blocks.block" : "api","_uri_.blocks.position" : {"$eq" : 1.0}},{"_uri_.blocks.isWild" : true,"_uri_.blocks.position" : {"$eq" : 1.0}}]},
{"$or" : [{"_uri_.blocks.block" : "v1","_uri_.blocks.position" : {"$eq" : 2.0}},{"_uri_.blocks.isWild" : true,"_uri_.blocks.position" : {"$eq" : 2.0}}]},
{"$or" : [{"_uri_.blocks.block" : "users","_uri_.blocks.position" : {"$eq" : 3.0}},{"_uri_.blocks.isWild" : true,"_uri_.blocks.position" : {"$eq" : 3.0}}]},
{"$or" : [{"_uri_.blocks.block" : "{userid}","_uri_.blocks.position" : {"$eq" : 4.0}},{"_uri_.blocks.isWild" : true,"_uri_.blocks.position" : {"$eq" : 4.0}}]},
{"$or" : [{"_uri_.blocks.block" : "profile","_uri_.blocks.position" : {"$eq" : 5.0}},{"_uri_.blocks.isWild" : true,"_uri_.blocks.position" : {"$eq" : 5.0}}]},
{"_canonical_._httpMethod_":"POST"}
]
}
},
{"$limit" : 1.0})
但它似乎並沒有完全匹配,因爲我希望。
關於如何查詢Mongo只返回最準確的文檔的任何建議?
有沒有辦法,如果我在文檔中添加URI的正則表達式版本,我可以從那裏搜索我的URI? 所以我的文檔可能有這樣的URI /api/v.*/users/.*/profile ,然後像做db.apis.find( 「URI」:「/ API/V2 /用戶/ 12312341/profile「) – TheJason
我沒有看到你想要做什麼,你不想在特定的url模式下尋找一個userId匹配嗎? –
嗯,這是我的問題..我試圖自動化一個相當大的API網絡(3500多個不同的URI)。所以我永遠不會知道URI中的哪個塊是靜態的或動態的。 我有我的集合中的每個URI的文檔,其中包含路由信息,什麼不是。 – TheJason