【问题标题】:How to use $or operator in URL query string for node.js express mongoose backend如何在 node.js express mongoose 后端的 URL 查询字符串中使用 $or 运算符
【发布时间】:2017-09-22 05:36:19
【问题描述】:

是否有一种(正确的)方法可以在 URL 查询字符串中使用 $oroperator 来实现客户端可自定义的查询,该查询仅包含和组合字段以针对我的 node.js 提供支持RESTful API?

假设我有类似的对象

[{
  A: 1,
  B: 2,
  C: 42
}, {
  A: 3,
  B: 1,
  C: 42
}]

如果在多个字段中搜索,我如何使用 mongoose 查询 MongoDB 以获取 both ?像 $and: [{C:42}, $or: [{A:1}, {B:1}]] 这样的 URL 参数?

我尝试了GET /api/orders?$or=[{A:1},{B:1}]],但这会导致类似orders.find({ '$or': '[{A:1},{B:1}]]' }}) 的查询,其中数组是一个字符串。然后 MongoDB 驱动程序抱怨 $or needs an array

像 mongo-querystring 这样的所有库都有一些用于 $gt 等的复杂运算符,但没有用于参数的简单 OR。我在这里错过了什么?

我的目标是建立一个方便的搜索字段,用户可以在其中输入一个简单的字符串,然后在多个字段中进行搜索,返回 all 文档,其中至少有一个字段(或子字符串该字段的)匹配。所以前端应该决定服务器应该搜索哪些字段以及如何搜索,从而产生一组动态的 AND/OR 组合字段/值对。

提前致谢,

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    一种选择是使用qs library,它是一个支持嵌套对象的查询字符串解析器。

    const qs = require('qs');
    
    const query = {$or:[{A:1},{B:1}]};
    
    let stringQuery = qs.stringify(query);
    
    console.log(stringQuery); // => %24or%5B0%5D%5BA%5D=1&%24or%5B1%5D%5BB%5D=1
    console.log(qs.parse(stringQuery)); // => { '$or': [ { A: '1' }, { B: '1' } ] }
    

    【讨论】:

    • 感谢您的回复,这是一种不错的方式。我自己完成了解析,但这基本上是解决方案。
    • 谢谢。附带说明一下,未编码的查询字符串如下所示:$or[0][A]=1&$or[1][B]=1
    • @Seeven 您说“未编码的查询字符串如下所示:$or[0][A]=1&$or[1][B]=1”如何使其与示例匹配以上解析结果?
    猜你喜欢
    • 2015-10-16
    • 2012-12-19
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多