簡體   English   中英

貓鼬聚合,如何執行“選擇為”?

[英]Mongoose aggregation, how perform 'select as'?

我剛剛開始使用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()和聚合)。 但是我如何處理訂單?

在MongoDB中只有一個查詢具有您所擁有的模式設計是無法做到這一點的。 您的架構對於關系型數據庫來說是很好的選擇,但對於NoSQL而言可能不是理想的選擇。

使用您的模式,您將必須執行兩個查詢:

  • 付款匯總作業,按訂單匯總付款
  • 一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM