我刚开始使用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()和聚合)。但我如何为订单数组做这件事?
答案 0 :(得分:1)
使用您拥有的架构设计,MongoDB中只有一个查询无法执行此操作。您的架构适用于关系数据库,但它可能不适合NoSQL。
使用您的架构,您将不得不进行两次查询:
另一种方案是只有一个订单文件集合,并将付款作为子文件存储在订单文件上,例如。订单看起来像这样:
{
name: "Foo"
payments: [ { date: xxxx, sum: 42.00}, { date: yyyy, sum: 12.00} ]
}
请查看有关数据模型的Mongo文档:http://docs.mongodb.org/manual/data-modeling/#data-models