gpt4 book ai didi

node.js - Mongoose :返回没有重复条目的唯一结果集

转载 作者:可可西里 更新时间:2023-11-01 09:20:48 25 4
gpt4 key购买 nike

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

  • 艾伦
  • 艾伦·傅里叶
  • 艾伦
  • 艾伦麦克斯韦
  • 艾伦
  • 符亚伦
  • 艾伦随便
  • 艾伦无论是谁
  • 艾伦·史密斯
  • 艾伦·罗杰斯

当查询此数据库中的“Allan”或什至只是“all”(使用 .find(regex...) 并将返回结果的数量限制为 5 时,我得到了这个:

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

拥有三个重复的“Allan”条目,我们浪费了很多结果多样性(谈论搜索输入字段的自动完成功能)。我需要返回的结果集不重复,例如:

  • 艾伦
  • 艾伦·傅里叶
  • 艾伦麦克斯韦
  • 符亚伦
  • 艾伦随便

如果有的话,如何使用 mongoose 实现?

最佳答案

您可以使用find 建立查询,然后将调用链接到distinct。在生成的查询对象上获取结果中的唯一名称:

var search = 'Allan';
Name.find({name: new RegExp(search)}).distinct('name').exec(function(err, names) {...});

或者您可以将所有这些组合到对 distinct 的调用中在模型上,提供查询对象作为第二个参数:

var search = 'Allan';
Name.distinct('name', {name: new RegExp(search)}, function(err, names) {...});

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

您也可以使用 aggregate 来做到这一点,这样您就可以直接限制结果的数量:

Name.aggregate([
{$match: {name: new RegExp(search)}},
{$group: {_id: '$name'}},
{$limit: 5}
])

关于node.js - Mongoose :返回没有重复条目的唯一结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com