【问题标题】: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);
  })
}

【问题讨论】:

    标签: node.js regex mongodb mongoose aggregation-framework


    【解决方案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,这就是我一直在寻找的。再次感谢您的所有努力。
    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2012-02-13
    • 2016-04-30
    • 2013-07-18
    • 2022-12-12
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多