查找并返回非重复值
Posted
技术标签:
【中文标题】查找并返回非重复值【英文标题】:Find and return non duplicate values 【发布时间】:2018-04-02 21:54:45 【问题描述】:我有一个问题,从昨天开始我一直在尝试解决,其中我编写了一个 API,它接受城市/子城市名称,然后查询数据库以获取城市或子城市匹配的所有文档。
我的问题是:
1)如果有 4 个文档,其中 3 个文档的城市为孟买,1 个文档的城市为 Navi Mumbai,当我查询孟买时,我应该只得到 2 个文档,其中一个文档的城市是孟买,另一个文档的城市是 Navi Mumbai,但我没有像那样工作,而是得到了所有 4 个文件作为回报,我得到了 3 个城市为 Mumbai 的文件和 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);
)
【问题讨论】:
【参考方案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
发出“唯一”匹配的条目。
【讨论】:
非常感谢@Neil,这就是我一直在寻找的。再次感谢您的所有努力。以上是关于查找并返回非重复值的主要内容,如果未能解决你的问题,请参考以下文章
python面试题- 二分法查找给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。