我在一个简陋的环境中使用猫鼬。如何确保在我的结果集中没有任何重复的结果?示例:我的数据库包含10个(部分重复)名称:
当查询这个数据库时,查找'Allan‘,甚至可能只是'all’(使用.find(regex.)并将返回结果的数量限制为5,我得到以下结果:
有三个重复的'Allan‘条目,我们浪费了很多结果多样性(谈论一个搜索输入字段的自动完成函数)。我需要返回的结果集没有重复,例如:
如果真的要用猫鼬的话,怎么才能做到呢?
发布于 2015-05-04 13:01:38
可以使用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}
])发布于 2015-05-04 00:40:03
您可以使用MongoDB的distinct()查询在您的集合中只查找不同的值(即惟一值)。根据API文档,distinct可以与猫鼬一起使用。
他们的例子:
{ "_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" ]
发布于 2015-05-04 00:44:22
您可以使用这里建议的方法过滤数组中的搜索结果:
https://stackoverflow.com/questions/30020946
复制相似问题