MongoDB根据其他集合中的某些值查询计数

时间:2015-02-13 09:25:48

标签: mongodb

我有一个configuration集合,其中包含以下字段:

1) Model

2) Threshold

在上面的集合中,为每个模型给出了一定的阈值,如下所示:

'model1' 200

'model2' 400

'model3' 600

还有另一个名为customer的集合,其中包含以下字段:

1)model

2)customerID

3)baseValue

在上面的集合中,数据如下:

'model1' 'BIXPTL098' 300

'model2' 'BIXPTL448' 350

'model3' 'BIXPTL338' 500

现在,我需要获取特定模型baseValue的客户记录数大于configuration集合中该特定模型的阈值。

示例:对于上述演示数据,查询应返回1,因为baseValue(300)中只有一个客户(BIXPTL098)Threshold(200)大于model(model1) configuration {1}}

configuration集合中有数千条记录。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

门槛多久会改变一次?如果它不经常更改,我会在每个文档上存储模型threshold和客户baseValue之间的差异。

{
    "model" : "model1",
    "customerID" : "BIXPTL098",
    "baseValue" : 300,
    "delta" : 100    // customer baseValue - model1 threshold  = 300 - 200 = 100
{

并查询delta> 0

db.customers.find({ "delta" : { "$gt" : 0 } })

如果threshold频繁更改,最简单的选择是逐个模型计算超出模型阈值的客户文档:

> var mt = db.models.findOne({ "model" : "model1" }).threshold
> db.customers.find({ "model" : "model1", "baseValue" : { "$gt" : mt } })