【发布时间】:2017-03-04 07:47:01
【问题描述】:
我创建了这个 URI 集合和一个允许我传递 URI 和 httpMethod 的函数,它构建了一个 MongoDB 查询来查找匹配的文档。问题是 URI 中可以包含动态元素……就像这样:
/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 以仅返回最准确的文档的任何建议?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework