我有一个数据过滤表单,其中包含大约15到20下拉字段。下拉字段的目的是提供数据过滤选项。例如看看下面的图像(图像是从Zoopla应用):MongoDB查询 - 数据过滤
正如你可以在图片中看到,它显示7个下拉领域。用户为每个字段选择一个选项,或者只选择几个字段并在搜索按钮上点击,并显示结果。
我想实现相同的功能,但那里有一个问题。
我至今尝试过!
用户有权选择是否填写所有的下拉字段或者只是2,仍然可以搜索到。搜索功能非常流畅。用户只能选择ONE下拉字段,并将其余的空余字段仍然可以得到结果。
要实现这一点,我在我的API创建以下路线。
app.get('/user/test',function(req, res) {
User.find({"$or": [{"employeeName": req.body.employeeName}, {"sector": {$elemMatch:{sec: req.body.sec}}} ] }, function(err, user)
{
if (err)
{
res.send(err);
}
console.log(user);
res.json(user);
});
});
正如你可以看到我现在用的是$或获取数据back.The问题是,如果用户只填写两个employeeName和扇区参数并搜索它发回的所有数据匹配employeeName或匹配扇区。实际上,我只想要匹配两个参数的数据。然后,我尝试使用$和,这解决了问题,但现在用户不能仅搜索employeeName或单个扇区等单个参数。它必须有两个参数才能返回数据。
总之我如何编辑我的API我的搜索路径给用户以任何方式与任何数量的参数搜索的灵活性。只是要清楚,搜索只会发生在页面的下拉字段内。因此,如果有20个下拉领域则用户的是可能性,能够搜索用最少的1个参数,最多20个参数
这是一个有点困难,我了解我的点所以,如果你不明白的问题,请让我知道,我会尽力解释再次
构建一个查询构建器,这将是一个更好的选择 –
@SarathNair感谢您的答复。你能再解释一下吗?或者如果你有任何资源?我不确定查询构建器的含义。 – Skywalker
基本上你需要测试给定哪些参数,然后根据一系列预定义的查询选择相应的查询或者(不确定这里是否是适当的选择)。查询构建器基本上是Query对象的接口,其中每个方法都会返回查询对象,以便您可以动态添加标准。我会告诉你如何去做,因为我的JS太可怕了。 –