查找并返回非重复值

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面试题- 二分法查找给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。

查找重复的单词

在字典中查找重复值并打印重复元素的键

用sql语句查找某一行的一个值并返回那个值,怎么写? 请将详细点 ,谢谢

按名称查找cookie,然后使用javascript(无jquery)返回包含值的cookie [重复]