我正在尝试建立一个查询生成器,它将允许我根据用户输入的参数过滤数据。我的数据模型是这样的:
{
"_id": {
"$oid": "871287215784812"
},
"tags": [
"school",
"book",
"bag",
"headphone",
"appliance"
],
"consultingDays": 57,
"client": "someOne",
"subSector": "something",
"region": "UK",
"__v": 0
}
目前,我的查询构建器如下所示:
app.post('/user/test',function(req, res) {
var query = {};
//QUERY NO.1 - This works perfectly
if (req.body.region){
query.region = req.body.region
console.log(query.region)
}
// QUERY NO.2 - This works perfectly
if (req.body.subSector){
query.subSector = req.body.subSector
}
Project.find(query, function(err, project){
if (err){
res.send(err);
}
console.log(project);
res.json(project);
});
});
我的问题:
我想创建一个查询,它将从用户那里获取输入,解析“tags”数组并返回所需的JSON。
例如:
如果用户请求一个包含**“school”,“book”,“bag”的对象,它将返回上面我的数据模型所示的对象。但是如果用户请求一个包含“school”,“book”,“ninja Warrior”**的对象,它将不会返回任何数据,因为数据库中没有包含所有这3个字符串的对象。
我尝试过的方法:
我已经尝试了以下方法
if (req.body.sol){
query.solutions = {"tags" : {$in: [req.body.sol]}}
}
或
if (req.body.sol){
query.solutions = {$elemMatch:{tags: req.body.sol}}
}
或
if (req.body.sol){
query.solutions = { tags: { $all: [req.body.sol]}}
}
请求是这样发送的,它们返回一个空数组:
- 此外,问题是用户将获得下拉选项。例如,他/她可能会获得3个下拉框。每个下拉框将显示标签数组中的所有五个选项。用户将为每个下拉框选择一个值。然后筛选结果。因为数据库中可能存在包含“book”、“bag”、“shoes”。用户可以在tags数组中选择这五个关键字的任意组合 *
有谁知道我该怎么解决这个问题吗?
2条答案
按热度按时间huwehgph1#
你需要以
sol
的形式发送一个数组,所以在Postman中你应该将sol
改为sol[0]
、sol[1]
等。然后使用以下代码:没有
[]
,因为req.body.sol
是一个数组。s2j5cfk02#
我已经为嵌套对象实现了一个简单的查询构建:
我还没有实现数组,但是通过一些小的工作你就可以实现它。Mongo操作符也是一样。完整的例子可以在Gist上看到。