Mongodb 优化';不在';NoSQL查询

Mongodb 优化';不在';NoSQL查询,mongodb,database-design,nosql,scalability,query-performance,Mongodb,Database Design,Nosql,Scalability,Query Performance,对于我的应用程序,当从NoSQL数据库中提取文档时,我需要确保它们每次都是唯一的文档,而不是我已经提取的文档 我考虑过两种方法: 1) 一个基本的Not In/'$nin'查询,它根据已提取的给定本地文档ID数组检查潜在文档(每次提取时也会更新) 2) 在查询中不使用NIN条件,而是在提取潜在文档后,在本地构造的哈希映射中手动筛选出与DocID匹配的文档(每次提取时也会更新) 这两种方法似乎都有点低效,所以我想知道是否有一种更优化的解决方案我还没有考虑过?使用$nin操作符在数据库上运行查询的第

对于我的应用程序,当从NoSQL数据库中提取文档时,我需要确保它们每次都是唯一的文档,而不是我已经提取的文档

我考虑过两种方法:

1) 一个基本的Not In/'$nin'查询,它根据已提取的给定本地文档ID数组检查潜在文档(每次提取时也会更新)

2) 在查询中不使用NIN条件,而是在提取潜在文档后,在本地构造的哈希映射中手动筛选出与DocID匹配的文档(每次提取时也会更新)


这两种方法似乎都有点低效,所以我想知道是否有一种更优化的解决方案我还没有考虑过?

使用
$nin
操作符在数据库上运行查询的第一个选项可能会更有效-如果您在查询筛选器字段上有索引的话。您可以通过使用
explain
方法生成查询计划进行检查。当您可以直接在数据库服务器上运行查询时,不建议使用手动筛选的第二个选项(第一个选项)。这是否意味着使用
$nin
提取文档不是n^2?我的理解是,我传递到查询中的数组没有“索引”(也称为非哈希映射),因此对于每个提取的文档,我们必须迭代给定的数组以检查它是否在其中=>n*n=n^2?您将为集合的字段编制索引。您将要传递的数组将是一个数组-请参阅。我只是读取了文档,在我的示例中,我将使用文档ID上的自动创建索引,但是,由于
$nin
仍然需要迭代每个文档,因此我看不出这比n^2更有效?关于您的初始评论,文档中还指出:“……在许多情况下,带有索引的$nin查询的性能可能不比必须扫描集合中所有文档的$nin查询好。”如果您与自动生成的_id匹配,并且没有在集合中跳过,您可以使用
$gt
获取您所看到的最新文档之后的文档。使用
$nin
运算符在数据库上使用和运行查询的第一个选项可能非常有效-如果您在查询筛选器字段上有索引。您可以通过使用
explain
方法生成查询计划进行检查。当您可以直接在数据库服务器上运行查询时,不建议使用手动筛选的第二个选项(第一个选项)。这是否意味着使用
$nin
提取文档不是n^2?我的理解是,我传递到查询中的数组没有“索引”(也称为非哈希映射),因此对于每个提取的文档,我们必须迭代给定的数组以检查它是否在其中=>n*n=n^2?您将为集合的字段编制索引。您将要传递的数组将是一个数组-请参阅。我只是读取了文档,在我的示例中,我将使用文档ID上的自动创建索引,但是,由于
$nin
仍然需要迭代每个文档,因此我看不出这比n^2更有效?关于您的初始评论,文档中还指出:“……在许多情况下,带有索引的$nin查询的性能可能不比必须扫描集合中所有文档的$nin查询好。”如果您与自动生成的_id匹配,并且没有在集合中跳过,您可以使用
$gt
获取您看到的最新文档之后的文档。