MongoDB / Mongoose查询生成器

我试图build立一个查询生成器,这将允许我根据用户input的参数过滤数据。 我的数据模型是这样的:

{ "_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); }); }); 

我的问题:

我想创build一个查询,将采取从用户input和parsing“标签”数组,并返回所需的JSON。

例如:

如果用户请求一个包含“学校”,“书”,“包”的对象,它将返回上面看到我的数据模型的对象。 但是,如果用户请求“学校”,“书”,“忍者勇士”的对象,它不会返回任何数据,因为数据库中的任何对象都不包含所有这3个string。

我曾尝试过:

我已经尝试了以下

 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个下拉框。 每个下拉框将显示tags数组中的所有五个选项。 用户将为每个下拉框select一个值。 然后过滤结果。 因为数据库中可能有一个对象,在标签数组中包含“book”,“bag”,“shoes”。 用户可以在标签数组中select这五个关键字的任意组合

有谁知道我可以解决这个问题?

你需要发送一个数组作为sol所以在邮差你应该改变sol sol[0]sol[1]等,然后使用这个:

 if (req.body.sol){ query.solutions = {"tags" : {$in: req.body.sol}} } 

没有[]因为req.body.sol是一个数组呢。