NodeJS MongoDB动态查询

时间:2017-03-28 11:20:22

标签: javascript node.js mongodb express

我有一个NodeJS服务器在' / api / jobs /'上使用get方法运行express。调用时,我从url获取一些查询字符串参数,然后对MongoDB数据库进行查询以获取作业。

Example Url: '/api/jobs/?Groups=1,2&Statuses=3,4'

我想构建的MongoDB查询是:

{ $or: [{"Group.Id" : 1}, {"Group.Id" : 2}], $or: [{"Status.Id": 3}, {"Status.Id": 4}]}

如果我直接针对数据库运行这个,我得到了我需要的结果,但是我不能想到在JavaScript中动态构造查询的方法。我做过的任何尝试都会给我一个像这样的对象,因为$或属性只能在一个合适的JSON对象中存在一次。

{$or : [{"Group.Id" : 1}, {"Group.Id" : 2}]}

关于如何使用JavaScript或MongoDB Node API进行此操作的任何想法?

2 个答案:

答案 0 :(得分:2)

首先获取查询属性,即字符串:

def disemvowel(word):
    word = word.lower()
    vowels = ["a" , "e", "i", "o", "u"]
    return "".join([char for char in word if char not in vowels])  
print disemvowel("Aaaallbag")

以逗号分割并解析为整数:

const groupString = req.query.Groups; // === '1,2'
const statusString = req.query.Statuses; // === '3,4'

然后搜索任何组ID。您的查询应如下所示:

const groupNums = groupString.split(',').map(parseInt); // === [1, 2]
const statusNums = statusString.split(',').map(parseInt); // === [3, 4]

对状态ID执行相同的操作。

答案 1 :(得分:0)

您可以使用此

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public int? MyNotNullable { get; set; }

但是在这种情况下,您必须发送MongoDB的相同名称字段和查询参数密钥。如果您这样做,它就是完全动态的查询构建器。