Mongoose聚合,如何执行'select as'?

时间:2015-01-24 19:30:48

标签: node.js mongodb

我刚开始使用Mongoose.js库使用Mongo Db。 我有两个模式,订单和付款。 我想进行一个简单的查询,以获得具有该订单所有付款总和的所有订单。

架构

顺序

{ name : String }

付款

{ date : Date, order : Schema.ObjectId, sum : Number }

在mysql中我会这样做:

select *,(select SUM(sum) from payments where payments.order = orders.id group by payments.order) as sum from orders  

我一直在寻找聚合方法来构建查询。但我发现的所有例子都是针对单个对象的。我可以毫不费力地获得单个订单的总和(使用findOne()和聚合)。但我如何为订单数组做这件事?

1 个答案:

答案 0 :(得分:1)

使用您拥有的架构设计,MongoDB中只有一个查询无法执行此操作。您的架构适用于关系数据库,但它可能不适合NoSQL。

使用您的架构,您将不得不进行两次查询:

  • 付款的汇总作业,用于汇总按订单分组的付款
  • a find()或findOne(),以获取订单名称

另一种方案是只有一个订单文件集合,并将付款作为子文件存储在订单文件上,例如。订单看起来像这样:

{ 
   name: "Foo"
   payments: [ { date: xxxx, sum: 42.00}, { date: yyyy, sum: 12.00} ]
}

请查看有关数据模型的Mongo文档:http://docs.mongodb.org/manual/data-modeling/#data-models