我在MEAN环境中使用Mongoose。如何确保结果集中没有任何重复结果? 示例:我的数据库包含10个(部分重复)名称:
查询此数据库以查找Allan'或者甚至只是“所有人”。 (使用.find(regex ...)并将返回的结果数限制为5,我得到了这个:
有三个重复的“Allan&#39”条目,我们浪费了很多结果多样性(谈论搜索输入字段的自动完成功能)。我需要返回的结果集没有重复项,例如:
如果可以的话,怎样才能使用猫鼬?
答案 0 :(得分:8)
您可以使用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}
])
答案 1 :(得分:0)
您可以使用MongoDB的distinct()
查询来查找集合中的不同值(即唯一值)。根据{{3}},distinct可以与Mongoose一起使用。
他们的例子:
{ "_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" ]
答案 2 :(得分:0)
您可以使用此处建议的方法过滤搜索结果: