我有一个问题,我从昨天起就试图解决这个问题,我编写了一个接受城市/子城市名称的API,然后在数据库中查询城市或子城市匹配的所有文件。
我的问题是:
1)如果有4个文件,其中3个文件有城市作为孟买,1个文件有城市作为Navi Mumbai,当我查询孟买时,我应该只得到2个文件,其中一个文件'城市是孟买和另一个文件'城市是Navi Mumbai但是我没有那样工作,而是获得了所有4份文件作为回报,我获得了3个文件,其中有城市作为孟买,1个文件有城市作为Navi Mumbai。我想知道如何消除重复的结果,只返回没有重复键的文档,只返回一个文档而不重复键值
目前我的代码如下:
exports.get_startup_based_on_locaton = function(req, res) {
SSchema.find({ $or:[{'city': { $regex : new RegExp(req.params.location, "i")}}, {'subcity': { $regex : new RegExp(req.params.location, "i")}}]}, function(err, sschema) {
if (err)
res.send(err);
res.json(sschema);
})
}
答案 0 :(得分:1)
你想要.aggregate()
。这是"群组"和.find()
没有'分组的唯一内容:
exports.get_startup_based_on_locaton = function(req, res) {
SSchema.aggregate([
{ $match: {
$or:[
{'city': { $regex : new RegExp(req.params.location, "i")}},
{'subcity': { $regex : new RegExp(req.params.location, "i")}}
]
}},
{ $project: { combined: ['$city','$subcity'] } },
{ $unwind: '$combined' },
{ $match: { combined: { $regex : new RegExp(req.params.location, "i")} } },
{ $group: { _id: '$combined' } }
], function(err, sschema) {
if (err)
res.send(err);
res.json(sschema);
})
}
在两个字段中搜索后,将它们与匹配的文档中的$project
一起显示。然后你$unwind
形成的数组并仅过滤匹配的条目。
最后$group
会发出" unique"匹配的条目。