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

在数组查询中使用大$nin/$时,如何优化mongodb查询?,mongodb,optimization,find,Mongodb,Optimization,Find,查询是通过以下方式生成的: 1-转到redis,获取要在$nin上使用的ID列表 2-转到mongodb,使用_id:$nin[大列表]进行地理查询,排除用户 我的问题是,$nin列表上的用户每秒更新一次,增长相对较快,并且将永远增长 编辑1: 我还将相同的列表保存在mongodb上,作为文档的属性。因此,如果我可以使用另一个集合中的find来否定geoquery的_id,那么它就可以工作,尽管我不确定这是否可行,但可能不行 编辑2: 我想到的一种方法是将用户id推送到viewed_by属性,这

查询是通过以下方式生成的:

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

2-转到mongodb,使用_id:$nin[大列表]进行地理查询,排除用户

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

编辑1:

我还将相同的列表保存在mongodb上,作为文档的属性。因此,如果我可以使用另一个集合中的find来否定geoquery的_id,那么它就可以工作,尽管我不确定这是否可行,但可能不行

编辑2:

我想到的一种方法是将用户id推送到viewed_by属性,这样,我就不用进行两次查询,一次是查找已查看的文章,另一次是查找未读的文章,而是只进行一次查询,其中用户id不包含在文档的“viewed_by”属性中

然后问题就变成了按属性查看的问题,它会变得越来越大,可能也会变得很慢

是否存在以排序方式存储值的情况,这样在使用$ne筛选查询时,就不需要使用二进制搜索或其他快速数组查找按数组查看的所有值

编辑3:

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


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

这方面的用例是什么?如果您打算使用快速增长的_id数组查询$nin,那么我认为您正在走向悲伤。你能更具体地展示示例文档和查询吗?我刚刚再次编辑并添加了我的用例,我希望它足够清晰@克罗:你是不是设法解决了这个问题?我现在也有相同的ID,我计划将所有ID存储在我有另一个字段名的查看单元中,因为在我的情况下,我认为每个文档的mongo限制不会超过16Mb。但我想知道你是如何解决这个问题的?这个问题并没有真正解决,它是根据我的应用需求和限制来解决的。最后,我们决定,$nin/$In的大小会有一个限制,一旦它满了,我们就从数组中取出旧的,比如FIFOdepending,根据您的情况,您可以使用REDIS之类的东西为您进行列表交集,然后再查询mongo,这绝对是多种应用程序的最佳解决方案。。。