我有一个非常大的集合(超过800k),我需要实现基于标签的自动完成(基于单词开头)功能的查询。我的文件是这样的:mongodb快速标签查询
{
"_id": "theid",
"somefield": "some value",
"tags": [
{
"name": "abc tag1",
"vote": 5
},
{
"name": "hij tag2",
"vote": 22
},
{
"name": "abc tag3",
"vote": 5
},
{
"name": "hij tag4",
"vote": 77
}
]
}
举例来说,如果我的查询将是与“AB”开头,并有一个“somefield”,即“一些价值”的结果将是“ABC标签1”的标签, “abc tag3”(仅限名称)。 我关心查询的速度远远超过插入和更新的速度。
我认为聚合框架将会是正确的方式,但是对于非常快速的查询,最好的管道和索引是什么?
这些文档不是'标签'文档,它们是代表客户端对象的文档,它们包含更多的数据字段,为了简单起见我省略了每个客户端有几个标签和另一个字段(我更改了它的名称,所以它不会是与标签数组混淆)。我需要获得一组没有一组客户端所有标签的重复内容。
我曾尝试做类似的去年,但数据库更小。随着数据量的增长,我最终不得不使用Solr。 – Martin 2014-09-29 18:43:23
你可以发布你试过的查询和索引吗?你使用聚合框架吗? – jacob 2014-09-29 19:28:15
对不起,代码已经过去了,但它是基于标记字段上的正则表达式。它预先聚合框架,但我不知道这将是最好的方法。根据我的经验,聚合框架喜欢将整个文档读入内存,即使$匹配只能使用索引 – Martin 2014-09-30 08:47:35