我有一个node.js + mongoose rest api。我有两个模式需要匹配,当新条目添加到一个或及时。匹配将比较整个文档集与一组参数。让我们说,例如,我有以下2个架构 -
Males: {
age: Number,
location: String,
language: String,
matchedFemales: []
}
Females: {
age: Number,
location: String,
language: String,
matchedMales: []
}
现在,我必须收集一个集合并滚动浏览所有文档并找到匹配项。我有很多参数作为匹配标准,但让我们举一个例子,语言,位置应该相同,年龄几乎相等(+或 - 1年)。如下 -
Males: [{
id: 1001,
age: 20,
location: London,
language: English,
matchedFemales: [2001,2002]
},
{
id: 1002,
age: 30,
location: London,
language: English,
matchedFemales: []
},
{
id: 1003,
age: 20,
location: Madrid,
language: Spanish,
matchedFemales: [2003]
}]
Females: [{
id: 2001,
age: 20,
location: London,
language: English,
matchedFemales: [1001]
},
{
id: 2002,
age: 19,
location: London,
language: English,
matchedFemales: [1001]
},
{
id: 2003,
age: 20,
location: Madrid,
language: Spanish,
matchedFemales: [1003]
}]
如何执行此匹配以及如何存储匹配项?
我是否应该迭代Male集合中的每个文档并在Female集合中查找匹配并更新它?如果是这样,我计划提供服务并每隔X分钟拨打一次该服务。这项工作将耗费时间和资源(因为它必须遍历每个文档并找到匹配项),但每天将运行一定次数。如果每5分钟一次,那么它将在一小时内运行12次。
不是将LHS中的所有文档与RHS中的所有文档进行匹配,而是在插入记录时,我可以找到该文档的匹配项并进行更新。这种方法将减少时间和时间。资源消耗比以前的方法,但它将运行更多次,即,对于每次插入/更新,必须这样做。
或者还有其他优雅的方法吗?
P.S - 如果这个问题看起来不合适,请将我引向正确的参考或咨询来源。