获取MongoDB以使用distinct()的覆盖查询

时间:2015-09-17 16:43:23

标签: c# mongodb

我尝试使用distinct()聚合运算符,以便能够列出嵌入文档中字段的所有可能值,同时还使用一些查询条件来限制它。

具体来说,我在每个文档中都有一个包含源信息的子文档。

PHP

function delete($id) {
   $result = [];
   try {
      $this->yourPostService->delete($id); // handle your sql here
      $result = ['result' => true];
   } catch(Exception $e) {
      $result = ['result' => false, 'error' => $e->getMessage()];
   }
   echo json_encode($result);
   exit;
}

JS

$.ajax({ url: 'yourl/post/delete/'+id, // your post id
 data: {},
 type: 'post',
 success: function(data) {
              var data = $.parseJson(data);
              if(data.result) {
                 $('#post'+id).remove(); //your post element
              } else {
                 console.log(data.error)
              }
          }
});
"dataSource" : {
    "customer" : "Contoso"
    "site" : "Washington"
    "machine" : "Model A"
    "date" : "2015-02-18T16:48:00Z"
}
"dataSource" : {
    "customer" : "Umbrella"
    "site" : "Racoon City"
    "machine" : "Model A"
    "date" : "2015-02-18T16:48:00Z"
}

我也在数据上设置了复合索引,并且希望能够快速运行查询,我可以检索所有客户,选择一个,查询该客户拥有的所有网站,选择一个,然后查询列出该客户在该站点拥有的所有计算机。

使用distinct()我能够做到这一点,但不是很快,因为它必须运行IXSCAN而不是覆盖查询,所以,有什么方法可以加快速度吗?

备注 其他可能相关或不相关的信息

  • 我正在使用C#驱动程序并尝试将其合并到我正在构建的UI中,但我甚至无法让它在mongo shell中工作
  • 打开关于如何重构我的数据或方法的建议,最好是我可以设置查询(客户 - >网站 - >机器)不需要严格意义上的方式
  • 我知道如果查询返回_id字段,如here所示,则它不能成为被覆盖的查询,但我不知道如何使用它来帮助我特殊情况
  • 似乎还有一些outstanding issues,但我不足以判断这是否相关,我是否在嵌入式文档中索引字段,而不是索引整个文档本身

编辑:我尝试做什么 完整的文档看起来像这样

"dataSource" : {
    "customer" : "Contoso"
    "site" : "Mars"
    "machine" : "Model B"
    "date" : "2015-02-18T16:48:00Z"
}

我将来自机器的运行时数据记录为一系列文档。每个单独的文档代表正在测试的组件。根据记录会话的长度,这可以产生从几千个文档到更多文档的任何地方,目标是可以通过"回放"来测试新版本的软件。这些记录的数据,并将结果与​​最初结束的质量控制过程的输出进行比较。

所有这些都有dataSource子文档,因此通过在dataSource.customer上运行distinct()查询,我可以看到我拥有数据的所有客户,然后运行distinct(dataSource.site,{dataSource.customer :Contoso})我可以看到该客户拥有的所有网站,我有数据......

然后,一旦我指定了客户,网站,机器,日期,我就可以找到所有匹配的文档,检索它们,然后运行一个测试,模拟该特定机器在该特定日期的条件。 / p>

0 个答案:

没有答案