首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬:返回没有重复条目的唯一结果集

猫鼬:返回没有重复条目的唯一结果集
EN

Stack Overflow用户
提问于 2015-05-04 00:24:10
回答 3查看 11.5K关注 0票数 8

我在一个简陋的环境中使用猫鼬。如何确保在我的结果集中没有任何重复的结果?示例:我的数据库包含10个(部分重复)名称:

  • 艾伦
  • 爱伦傅立叶
  • 艾伦
  • 艾伦·麦克斯韦
  • 艾伦
  • 阿兰·福奥
  • 艾伦什么的
  • 艾伦
  • 艾伦·史密斯
  • 艾伦·罗杰斯

当查询这个数据库时,查找'Allan‘,甚至可能只是'all’(使用.find(regex.)并将返回结果的数量限制为5,我得到以下结果:

  • 艾伦
  • 爱伦傅立叶
  • 艾伦
  • 艾伦·麦克斯韦
  • 艾伦

有三个重复的'Allan‘条目,我们浪费了很多结果多样性(谈论一个搜索输入字段的自动完成函数)。我需要返回的结果集没有重复,例如:

  • 艾伦
  • 爱伦傅立叶
  • 艾伦·麦克斯韦
  • 阿兰·福奥
  • 艾伦什么的

如果真的要用猫鼬的话,怎么才能做到呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-04 13:01:38

可以使用find建立查询,然后对结果的查询对象进行distinct调用,以获得结果中的唯一名称:

代码语言:javascript
复制
var search = 'Allan';
Name.find({name: new RegExp(search)}).distinct('name').exec(function(err, names) {...});

或者,您可以将其组合成对模型上的distinct的调用,提供查询对象作为第二个参数:

代码语言:javascript
复制
var search = 'Allan';
Name.distinct('name', {name: new RegExp(search)}, function(err, names) {...});

在这两种情况下,names都是由不同的名称组成的数组,而不是完整的文档对象。

您也可以使用aggregate来完成此操作,这将允许您直接限制结果的数量:

代码语言:javascript
复制
Name.aggregate([
    {$match: {name: new RegExp(search)}},
    {$group: {_id: '$name'}},
    {$limit: 5}
])
票数 13
EN

Stack Overflow用户

发布于 2015-05-04 00:40:03

您可以使用MongoDB的distinct()查询在您的集合中只查找不同的值(即惟一值)。根据API文档,distinct可以与猫鼬一起使用。

他们的例子:

代码语言:javascript
复制
{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }

使用db.inventory.distinct( "dept" )将返回[ "A", "B" ]

票数 0
EN

Stack Overflow用户

发布于 2015-05-04 00:44:22

您可以使用这里建议的方法过滤数组中的搜索结果:

从数组中删除重复

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30020946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档