gpt4 book ai didi

javascript - MongoDB 查询 - 数据过滤

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:54 24 4
gpt4 key购买 nike

我有一个数据过滤器表单,其中包含大约 15 到 20 个下拉字段。下拉字段的目的是提供数据过滤选项。例如,请看下图(该图像来自 Zoopla 应用程序):

enter image description here

正如您在图片中看到的,它显示了 7 个下拉字段。用户为每个字段或仅几个字段选择一个选项,然后点击搜索按钮,然后显示结果。

我正在尝试实现相同的功能,但存在问题。

到目前为止我已经尝试过!

用户可以选择是填写所有下拉字段还是只填充 2 个字段,但仍然可以进行搜索。搜索功能非常流畅。用户只能选择一个下拉字段,并将其余所有字段留空,仍然可以获得结果。

为了实现这一点,我在 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);

});
});

正如您所看到的,我正在使用 $or 来取回数据。问题是,如果用户仅填写员工姓名和部门参数并进行搜索,则会发回与员工姓名或部门匹配的所有数据。实际上,我只想要与两个参数都匹配的数据。然后我尝试使用 $and 解决了问题,但现在用户无法仅搜索单个参数,例如员工姓名或部门。它必须同时存在两个参数才能返回数据。

总结如何在 API 中编辑搜索路线,以便用户能够灵活地以任何方式和使用任意数量的参数进行搜索。需要明确的是,搜索只会在页面上的下拉字段中进行。因此,如果有 20 个下拉字段,则用户有可能使用最少 1 个参数和最多 20 个参数进行搜索

对我来说,表达自己的观点有点困难,所以如果您不明白这个问题,请告诉我,我会尝试再次解释

最佳答案

我可以举一个例子来说明我如何构建查询。我在 SOA 项目的许多小型服务中使用了它。通常我会检查一个 Controller ,根据我正在等待的类型验证参数(如果您不使用像 Mongoose 这样的 orm),然后我在模型中构建查询。不管怎样,我希望这对你有帮助。

app.get('/user/test',function(req, res) {
// You initialize your mongodb query
var query = {};

// If employeeName was set, then you update the query
if (req.body.employeeName){
query.employeeName = req.body.employeeName;
}

// Same for the sector
if (req.body.sec){
query.sector = {$elemMatch:{sec: req.body.sec};
}
// and you keep going for every paramaters...
// Then you find with the query, if no parameter query = {}
User.find(query, function(err, users){
if (err){
res.send(err);
}
console.log(users);
res.json(users);
});
});

我还看到您想要对结果进行排序,因此您可能需要使用 aggregate查询来正确处理这个问题。对于“最近的”,您可以使用 _id 嵌入时间戳:

ObjectId("564afd0b65d680ff47ccfc59").getTimestamp();
// =>ISODate("2015-11-17T10:10:19Z")

//And in a shorter way:
db.collection.find(query).sort({_id:-1})

//Inside an aggregate it gives:
[{$sort: {_id: -1}}]

关于javascript - MongoDB 查询 - 数据过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34018134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com