JSON mongoDB查询的ODataURI

JSON mongoDB查询的ODataURI,json,node.js,mongodb,mongoose,odata,Json,Node.js,Mongodb,Mongoose,Odata,我正在和nodejs和mongoDB做一个项目。在get方法中,客户机向我发送一个odatauri作为示例 http://localhost:8080/persons?$filter=name eq 'test' 现在,我想在我的应用程序中转换mongoDB对象中$filter的结果,如下所示 var filter = {"name" : "test"} db.collection.find(filter) 然后将该对象放入这样的查找查询中 var filter = {"name" : "

我正在和nodejs和mongoDB做一个项目。在get方法中,客户机向我发送一个odatauri作为示例

http://localhost:8080/persons?$filter=name eq 'test'
现在,我想在我的应用程序中转换mongoDB对象中$filter的结果,如下所示

var filter = {"name" : "test"}
db.collection.find(filter)
然后将该对象放入这样的查找查询中

var filter = {"name" : "test"}
db.collection.find(filter)
这只是一个简单的例子,但在我的应用程序中,它更复杂。见

我想问的是,是否存在一个npm模块来做这件事,还是我必须手动做这件事,这将是一件复杂的事情。Bref,我在寻求更好的解决方案。
谢谢。好的,有两种解决方案,这取决于您需要如何使用GET请求,正如您在提供的链接中所看到的,请求由URL组成,它是域,直到第一个/,然后是路径,这是斜杠之间的所有参数(/),最后是查询,然后是“?”

您在问题中所说的是,您需要在单个查询参数中嵌入完整的查询,我能找到的唯一有用的用例是,如果您将使用其他查询参数来处理其他事情(即使在处理更简单的任务时,也应该进行一些重新思考).无论如何,如果您需要的话,我建议您发送一个URL编码的JSON.strigify处理对象和您需要的查询,然后在服务器端进行URL解码、解析,这是最简单的方法。 ?$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请求的正确方法就是执行查询,例如:

如果您这样做,并且使用像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
        }
    });
});

好吧,如果我理解你的话,你可以预先设置我发送一个url编码的JSON.strigify,或者使用简单的get方法,然后通过OData方法发送我的url??是的,根据文档,你应该嵌入,这不是最优雅或标准的工作方式,但它完成了工作。尽管搜索了一点,我发现了这个解析的库请求,看一看,让我知道。我发现这不是我想要的。假设我使用了你的第一个方法。如果我在url
{“libelle”:“test”}
中给出这样的查询,它会工作得很好,但我会给出这样的否定形式:
{“libelle”:{$ne:“test”}
它将不起作用,因为我将有一个对$的JSON解析错误du。最后它起作用了。我必须把$ne放在引号之间,这样我会有这样的结果:
{“libelle”:{“$ne”:“test”}

目前,我将使用该解决方案,但如果我有一个如何使用OData URI的解决方案,它会更好。感谢您的帮助@jmdiegoAny results,您是否继续此项目?有人帮助我进行剑道网格翻译。这可能会有所帮助。