MongoDB distinct-仅返回匹配的数组元素

时间:2015-02-25 18:09:15

标签: mongodb

我试图从数组中获取不同的标签以用于自动完成模块。收集格式为:

{
  tags:["apple","mango","apple-pie"]
},
{
  tags: ["man","lemon","lemon-lite"]
}

现在,我有兴趣获得带有前缀q的不同标签。

我触发的查询是:

db.portfolio.distinct("tags",{"tags":/app/});

但是,此查询返回整个数组: ["apple","mango","apple-pie"]

我的要求是:["apple", "apple-pie"]

如何修改我的查询以获得所需的结果?

2 个答案:

答案 0 :(得分:2)

您可以使用aggregation执行此操作。

  1. $unwind tags数组。
  2. 根据给定的正则表达式,$match您要查找的那些标签。
  3. $group使用$addToSet将标记> db.portfolio.aggregate([ { "$unwind": "$tags" }, { "$match": { "tags": /app/ }}, { "$group": { "_id": null, "tags": { "$addToSet": "$tags" } } } ]); { "_id" : null, "tags" : [ "apple-pie", "apple" ] }
  4. 代码看起来像这样:

    {{1}}

答案 1 :(得分:0)

不可能使用distinct,因为查询将返回包含匹配标记的文档(/ app /),这意味着也会有不匹配的标记。 distinct从所有这些标签中获取不同的集合。 因此,您必须再次过滤返回的数组(使用regex / app /)