如何在数组查询中使用大$ nin / $时优化mongodb查询?

时间:2015-04-30 20:12:49

标签: mongodb optimization find

查询是通过以下方式构建的:

1 - 转到redis,获取要在$ nin上使用的ID列表

2 - 转到mongodb,使用_id执行排除用户的地理查询:$ nin [big list]

我的问题是$ nin列表中的用户每秒更新一次,并且增长相对较快(并将永远增长)

编辑1:

我也有相同的列表保存在mongodb上作为文档的属性。所以,如果我可以使用另一个集合中的find来否定geoquery的_id,它可以工作,虽然我不确定这是否可能(可能不是?)

编辑2:

我认为将用户ID推送到“Viewed_by”属性的一种方式是,然后不是做2个查询,而是查找已查看的文章,而另一个查找未读文章,我只做1个查询向前看用户的“id”未包含在文档的“Viewed_by”属性中的文章。

然后问题变成了“Viewed_by”属性,它会变得越来越大,也可能变得慢查询?

是否存在以“排序”方式存储值的事情,因此当使用$ ne过滤查询时,它不需要查找Viewed_by数组的所有值(使用二进制搜索或其他快速搜索)数组查找)?

编辑3:

用法示例:我有一个不断增长的文档和用户数据库,用户使用自己的自定义查询搜索文档,但他们无法两次查看同一文档。

所以基本上我必须跟踪他们已经看过的所有文件,并将它们从下一个搜索结果中排除,因为结果是为每个用户定制的,我必须跟踪每个用户看到的内容。

0 个答案:

没有答案