我正在尝试向MongoDB提供标准化的结果值,并查询以在集合中找到最匹配的测试。
目前,我正在尝试通过获取文档中测试值的总和来标准化所有测试值,然后将测试值除以总测试值,然后将其乘以100。
下一步,我将计算要提供给MongoDB的归一化值与MongoDB结果数组中的归一化值之间的差,然后对每个文档的差异求和并按totalDiffs字段进行排序希望能找到最接近的匹配项。
我已经能够对这些值进行求和,对各个结果中的值进行归一化,并且我目前仍在计算与提供的结果值和文档中的结果值之差。 / p>
db.getCollection("tests").aggregate([
{$addFields: {"totalResultValues": {$sum: "$results.value"}}},
{$addFields: {
"results": {
$map:{
input: "$results",
as: "result",
in: {
"result_id": "$$result.result_id",
"value": "$$result.value",
"normalizedValue": {$multiply: [
{$cond: [{$eq: ["$totalResultValues", 0]}, 0, {$divide: ["$$result.value", "$totalResultValues"]}]}, 100]}
}},
}}},
{$addFields: {
"results": {
$map:{
input: "$results",
as: "result",
in: {
"result_id": "$$result.result_id",
"value": "$$result.value",
"normalizedValue": {$multiply: [
{$cond: [{$eq: ["$totalResultValues", 0]}, 0, {$divide: ["$$result.value", "$totalResultValues"]}]}, 100]}
}},
}}},
], {allowDiskUse: true})
现在测试结果文档如下:
{
"_id":"5ca7b3f3f8f134e1e5ad65b8",
"created":"2019-04-05T20:00:51.615Z",
"updated":"2019-04-05T20:00:51.615Z",
"name":"Test Result Name",
"results":[
{
"result_id":"5ca797f8c906436c0fc7e3d6",
"value":0.002
},
{
"result_id":"5ca797f8c906436c0fc7e3d0",
"value":0.102
},
{
"result_id":"5ca797f8c906436c0fc7e3bc",
"value":0
},
...
]
}
我目前希望我可以为MongoDB提供带有以下字段的对象数组。该数组可能有30多种不同的结果,可与Mongo中的测试结果数组进行比较。
[
{
"result_id":"5ca797f8c906436c0fc7e3d6",
"normalizedValue":0.002
},
{
"result_id":"5ca797f8c906436c0fc7e3d0",
"normalizedValue":0.102
},
{
"result_id":"5ca797f8c906436c0fc7e3bc",
"normalizedValue":0.482
},
...
]
然后希望该文档以最匹配的测试结果排序的这种格式返回:
{
"_id":"5ca7b3f3f8f134e1e5ad65b8",
"created":"2019-04-05T20:00:51.615Z",
"updated":"2019-04-05T20:00:51.615Z",
"name":"Close Test Result Name",
"results":[
{
"result_id":"5ca797f8c906436c0fc7e3d6",
"value":0.002,
"normalizedValue": 2.232
},
{
"result_id":"5ca797f8c906436c0fc7e3d0",
"value":0.102,
"normalizedValue": 10.563
},
{
"result_id":"5ca797f8c906436c0fc7e3bc",
"value":0,
"normalizedValue": 0
},
...
]
}
如果任何人都可以指出我解决该问题的方向,或者让我知道是否有可能做到,我将非常感激。我正在使用mongo-go-driver,但是我应该能够从shell进行翻译。谢谢。