我已成功执行了一个查询,该查询为我提供了模式中特定字段之一的平均值。我想在下一个查询中使用我之前查询中得到的平均值来进行比较。当我尝试这样做时,命令提示符将它视为两个不同的查询而不是一个。
我怎样才能在MongoDB中做到这一点?
答案 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()
因为它更适合任务,而且速度更快。