OData URI 到 JSON mongoDB 查询
Posted
技术标签:
【中文标题】OData URI 到 JSON mongoDB 查询【英文标题】:OData URI to JSON mongoDB query 【发布时间】:2015-01-14 17:11:02 【问题描述】:我正在使用 nodejs 和 mongoDB 做一个项目。在 get 方法中,客户端向我发送一个 OData uri,例如
http://localhost:8080/persons?$filter=name eq 'test'
现在我想在我的应用程序中像这样在 mongoDB 对象中转换 $filter 的结果
var filter = "name" : "test"
并将该对象放在这样的查找查询中
db.collection.find(filter)
这只是一个简单的例子,但在我的应用程序中它更复杂。见http://www.odata.org/documentation/odata-version-2-0/uri-conventions 我在问它是否存在一个 npm 模块来执行此操作,或者我是否必须手动执行某些复杂的操作。布雷夫,我正在寻求更好的解决方案。谢谢
【问题讨论】:
任何结果,您是否继续这个项目? 有人帮我翻译了剑道的网格here。这可能会有所帮助。 【参考方案1】:好的,这有两种方法,这取决于您需要如何使用 GET 请求,正如您在提供的链接中看到的那样,请求由 URL 形成,这是直到首先是 /,然后是路径,这是斜杠 ( / ) 之间的所有参数,最后是查询,即 "?" 之后的所有参数
您在问题中所说的是,您需要将完整的查询嵌入到单个查询参数中,我认为唯一有用的用例是您是否将其他查询参数用于其他事情(即使有一些重新考虑应该做以处理更简单的任务)。无论如何,如果这是您需要的方式,我建议您发送一个带有您需要的查询的 urlencoded JSON.strigify 处理对象,然后进行 urldecode,在服务器端解析它,这是最简单的方法。 http://www.yourDomain.com/persons?$filter=%7B%22name%22%3A%22test%22%7D
app.get("/persons", function(req, res)
console.log(req.query); // Should output filter : "%7B%22name%22%3A%22test%22%7D"
var query = req.query;
query = decodeURIComponent(query.filter);
query = JSON.parse(query);
db.collection("persons").find(query).toArray(function(error, result)
if(error)
res.status(500).send("Database problem");
else if(result.length == 0)
res.status(204).send("No content");
else
res.json(result : result); // Embedded in an object for security reasons
);
);
另一方面,如果您需要查询,仅此而已,那么您的自我复杂化程度超出了您的需要。使用 GET 请求的正确方法就是执行查询,例如: http://www.yourDomain.com/persons?name=test
如果你这样做并且使用像 express 这样的框架,那么这是最简单的事情......在路径解析器中,你从请求对象中获取查询,就是这样,例如:
app.get("/persons", function(req, res)
console.log(req.query); // Should output name : "test"
db.collection("persons").find(req.query).toArray(function(error, result)
if(error)
res.status(500).send("Database problem");
else if(result.length == 0)
res.status(204).send("No content");
else
res.json(result : result); // Embedded in an object for security reasons
);
);
【讨论】:
好吧,如果我理解得很好,你预先安排我发送一个 urlencoded JSON.strigify 或使用简单的 get 方法,然后通过 OData 方法发送我的 url ?? 是的,根据文档,您应该嵌入,这不是最优雅或最标准的工作方式,但它可以完成工作。 虽然搜索了一下,我找到了解析请求的这个库github.com/qraftlabs/node-odata-parser,看看,让我知道。 我发现这不是我想要的。假设我使用你的第一种方法。如果我在 url"libelle": "test"
中给出这样的查询,它会正常工作,但我会给出这样的否定形式:"libelle": $ne: "test"
它不会起作用,因为我将有一个 JSON 解析错误由于 $.
终于开始工作了。我必须将 $ne 放在引号之间,所以我会有类似的内容:"libelle": "$ne": "test"
现在我将使用该解决方案,但如果我有一个如何使用 OData URI 的解决方案,它会更好。感谢您的帮助@jmdiego以上是关于OData URI 到 JSON mongoDB 查询的主要内容,如果未能解决你的问题,请参考以下文章
是否有用于 OData 协议 Uri 的 .NET 类包装器