将一个查询的结果用于下一个查询

时间:2015-10-06 03:06:56

标签: mongodb mongodb-query aggregation-framework

我已成功执行了一个查询,该查询为我提供了模式中特定字段之一的平均值。我想在下一个查询中使用我之前查询中得到的平均值来进行比较。当我尝试这样做时,命令提示符将它视为两个不同的查询而不是一个。

我怎样才能在MongoDB中做到这一点?

1 个答案:

答案 0 :(得分:0)

我怀疑你真的在询问你正在使用的API的上下文而不是shell中的处理,但原则保持不变。

您的第一个结果始终是"数组"由.group()方法返回,因此要将其作为单数值进行访问,您只需返回"第一个"数组元素,即0索引。

此外,您的操作和整个案例仅仅是寻找"平均值"一个字段,然后查找那些大于返回的平均值的项目。 .aggregate()方法具有更简单的语法,并且运行速度更快,因为它的操作都是本机编码的而不是JavaScript解释的,在后一种情况下会显着减慢速度。

除非没有其他选择,否则请使用本机操作:

var result  = db.business.aggregate([
    { "$group": {
        "_id": null,
        "average": { "$avg": "$stars" }
    }}
]).toArray()[0];

db.business.find({ "stars": { "$gt": result.average } })

第一个操作减少到单个对象的数组,从中只从数组中获取第一个项目。然后可以在第二个查询中引用该对象,返回结果。

在异步环境中,您只需要在第一个操作的回调结果中调用第二个查询,以便在操作完成后查看范围结果。但是使用.aggregate()因为它更适合任务,而且速度更快。