node.js + mongoose - 如何实现匹配(如订单匹配)?

时间:2015-08-01 13:58:18

标签: node.js algorithm mongodb mongoose matching

我有一个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]
    }]

如何执行此匹配以及如何存储匹配项?

  1. 我是否应该迭代Male集合中的每个文档并在Female集合中查找匹配并更新它?如果是这样,我计划提供服务并每隔X分钟拨打一次该服务。这项工作将耗费时间和资源(因为它必须遍历每个文档并找到匹配项),但每天将运行一定次数。如果每5分钟一次,那么它将在一小时内运行12次。

  2. 不是将LHS中的所有文档与RHS中的所有文档进行匹配,而是在插入记录时,我可以找到该文档的匹配项并进行更新。这种方法将减少时间和时间。资源消耗比以前的方法,但它将运行更多次,即,对于每次插入/更新,必须这样做。

  3. 或者还有其他优雅的方法吗?

    P.S - 如果这个问题看起来不合适,请将我引向正确的参考或咨询来源。

0 个答案:

没有答案