我尝试使用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而不是覆盖查询,所以,有什么方法可以加快速度吗?
备注 其他可能相关或不相关的信息
编辑:我尝试做什么 完整的文档看起来像这样
"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>