Database MongoDB从指定版本中获取最新版本

Database MongoDB从指定版本中获取最新版本,database,mongodb,nosql,Database,Mongodb,Nosql,我的mongodb数据库中有一组测试结果。数据库中的每个文档都包含版本信息、测试数据、日期、测试运行信息等 该版本在文档中被分解并存储为单个值。例如:{VER_大调:“0”,VER_小调:“2”,VER_修订版:“3”,VER_补丁:“20} 我的应用程序希望能够指定一个特定的版本,并根据该版本获取文档以及以前的N个文档 例如: 如果version=0.2.3.20和n=5,则结果将返回版本为0.2.3.20、0.2.3.19、0.2.3.18、0.2.3.17、0.2.3.16、0.2.3.1

我的mongodb数据库中有一组测试结果。数据库中的每个文档都包含版本信息、测试数据、日期、测试运行信息等

该版本在文档中被分解并存储为单个值。例如:{VER_大调:“0”,VER_小调:“2”,VER_修订版:“3”,VER_补丁:“20}

我的应用程序希望能够指定一个特定的版本,并根据该版本获取文档以及以前的N个文档

例如:

如果
version=0.2.3.20
n=5
,则结果将返回版本为
0.2.3.20、0.2.3.19、0.2.3.18、0.2.3.17、0.2.3.16、0.2.3.15的文档

我想到的解决办法是:

  • 创建一个新的数据库,该数据库包含具有版本信息的文档并已排序。该数据库可用于获取以前的N个版本,该版本可用于获取测试结果数据库中相应的N个文档

  • >P>在测试结果数据库中执行排序,如数字1。虽然如果测试结果数据库很大,这将花费很长的时间。也考虑每次按顺序插入。

    像选项1中那样创建另一个数据库似乎不是正确的方法。但是对测试结果数据库进行排序似乎会有很多开销,我是否错认为我应该担心选项2会产生很多开销?我有一种印象,我必须查询整个数据库,然后在应用程序端对其进行排序。查询整个数据库似乎有点过头了

    db.collection_name.find().sort([Paramaters for sorting])
    

    你说得很对,查询和排序整个数据集将是非常过分的。我可能在这方面做得太过火了,但我试图在下面详细分析每件事

    术语 第一件事,首先是一些挑剔的地方。我认为当你想使用单词Collection时,你在使用术语Database。区分这两个概念将有助于导航文档并更好地理解MongoDB

    收集和分类 其次,重要的是要了解集合中的文档没有固有的顺序。文档返回到应用程序的顺序仅在从集合中检索文档时应用,例如在指定
    .sort()时
    在查询中。这意味着我们不需要将所有文档复制到其他集合中;我们只需要查询数据,以便只按所需顺序返回所需的数据

    查询 现在进入有趣的部分。查询如下所示:

    db.test_results.find({
       "VER_MAJOR" : "0",
       "VER_MINOR" : "2",
       "VER_REVISION" : "3",
       "VER_PATCH" : { "$lte" : 20 }
    }).sort({
      "VER_PATCH" : -1
    }).limit(N)
    
    我们的查询在三个前导版本字段上直接匹配,以将结果仅限于这些值,即特定版本“0.2.3”。由于我们需要的不仅仅是单个补丁版本,因此在
    版本补丁
    上应用了范围
    $lte
    过滤器

    然后,我们按
    veru PATCH
    对结果进行排序,以按补丁版本降序返回结果。最后,运算符用于限制返回的文档数量

    指数 我们还没有完成!还记得你说过在应用程序端查询整个集合并对其进行排序感觉太过火了吗?好吧,如果此查询不存在索引,数据库会做得非常好

    在确定索引中字段的顺序时,应遵循此规则。在这种情况下,这将为我们提供索引:

    { "VER_MAJOR" : 1, "VER_MINOR" : 1, "VER_REVISION" : 1, "VER_PATCH" : 1 }
    

    创建此索引将允许通过只扫描将返回的结果来完成查询,同时避免内存中的排序。可以找到更多信息。

    什么是“根据版本抓取文档以及以前的N个文档”?使用示例文档,所有返回的文档是否都有版本ion 0.2.3.20?还是所有版本为0.2.3的文档都会按补丁版本排序?我编辑了我的问题以澄清:如果
    version=0.2.3.20
    n=5
    ,那么结果将返回版本为
    0.2.3.20、0.2.3.19、0.2.3.18、0.2.3.17、0.2.3.16、0.2.3.15的文档。谢谢,这非常有用。我认为在前面的查询部分,但我似乎缺少一个优化搜索的索引。我们将阅读更多内容。谢谢!