我试图从数组中获取不同的标签以用于自动完成模块。收集格式为:
{
tags:["apple","mango","apple-pie"]
},
{
tags: ["man","lemon","lemon-lite"]
}
现在,我有兴趣获得带有前缀q的不同标签。
我触发的查询是:
db.portfolio.distinct("tags",{"tags":/app/});
但是,此查询返回整个数组:
["apple","mango","apple-pie"]
。
我的要求是:["apple", "apple-pie"]
。
如何修改我的查询以获得所需的结果?
答案 0 :(得分:2)
您可以使用aggregation
执行此操作。
$unwind
tags
数组。$match
您要查找的那些标签。$group
使用$addToSet
将标记> db.portfolio.aggregate([
{ "$unwind": "$tags" },
{ "$match": { "tags": /app/ }},
{ "$group":
{
"_id": null,
"tags": { "$addToSet": "$tags" }
}
}
]);
{ "_id" : null, "tags" : [ "apple-pie", "apple" ] }
。代码看起来像这样:
{{1}}
答案 1 :(得分:0)
不可能使用distinct,因为查询将返回包含匹配标记的文档(/ app /),这意味着也会有不匹配的标记。 distinct从所有这些标签中获取不同的集合。 因此,您必须再次过滤返回的数组(使用regex / app /)