所以我尝试使用Mongoose的$in
查询以下文档。
var Reports = [
{
"employee" : {
"gender" : {
"id": 0,
"name" : "Male"
},
"race" : {
"id": 1,
"name" : "White"
}
},
"date" : "2016-12-21T01:03:00.000Z",
"type": {
"id": 0,
"name" : "Business"
}
},
{
"employee" : {
"gender" : {
"id": 1,
"name" : "Female"
},
"race" : {
"id": 1,
"name" : "White"
}
},
"date" : "2016-11-02T12:55:00.000Z",
"type": {
"id": 1,
"name" : "Human Resources"
},
}
]
用于查询数据库的API路径
// Load Necessary modules
var mongoose = require('mongoose');
var Report = require("../models/report");
// HTTP POST '/api/query'
router.post('/query', function(req, res, next) {
var type = req.body.type;
var startDate = req.body.startDate;
var endDate = req.body.endDate;
var gender = req.body.gender;
var race = req.body.race;
var query = Report.find({});
if (type){
query = query.where('type.name').equals(type)
}
if (startDate && endDate) {
query = query
.where('date')
.gte(new Date(startDate))
.lte(new Date(endDate))
}
if (gender) {
// query = query.where('employee.gender.name').in(gender)
query = query.find({'employee.gender.name': {'$in': gender}})
}
if (race) {
// query = query.where('employee.race.name').in(race)
query = query.find({'employee.race.name': {'$in': race}})
}
query
.limit(10)
.exec(function(err,reports){
if(err)
return res.send(err);
res.json(reports)
})
})
我应该指出,性别和种族是用户在正文中发送的字符串数组(gender = ['Male','Female','Transgender']
,race = ['White','Black']
)请求。
在员工财产上设置索引。
db.reports.ensureIndex({employee : 1})
这是为了确保查询更有效,更快速。我甚至创建了额外的索引来查看我是否可以使查询工作
db.reports.ensureIndex({employee.gender : 1})
db.reports.ensureIndex({employee.gender.name : 1})
没有运气......
Mongo Shell
当我在Mongo Shell
下面运行此查询时,它似乎可以正常工作,但是当我尝试使用像POSTMAN这样的工具时它不会或我尝试使用AngularJS从前端发送请求
> db.reports.find({'suspect.gender.name': {'$in': ['Male']}}).count()
2
在我的前端代码中,我确保我的标头设置为"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
请帮忙。我在这里做错了什么?