2

Node/Express/MongoDB/Mongoskin を使用してアプリを構築しています。

私はデータベースに「クライアント」という名前のコレクションを持っています。ここには、クライアントアカウントに関する情報を含むドキュメントがあります。各クライアント ドキュメントには、次のような送り状オブジェクトを含む配列が含まれています。

doc.invoices = [
  {year: 2012,
  quarter: 1, 
  daily: 912.00, 
  sms: 42.00, 
  paid: true},

  {year: 2012,
  quarter: 2, 
  daily: 913.00, 
  sms: 55.00, 
  paid: true}, 

  {year: 2012,
  quarter: 3, 
  daily: 876.00, 
  sms: 82.00, 
  paid: true}, 

  {year: 2012,
  quarter: 4, 
  daily: 903.00, 
  sms: 93.00, 
  paid: false},

  {year: 2013,
  quarter: 1, 
  daily: 915.00, 
  sms: 67.00, 
  paid: true},

  {year: 2013,
  quarter: 2, 
  daily: 920.00, 
  sms: 35.00, 
  paid: true}, 

  {year: 2013,
  quarter: 3, 
  daily: 880.00, 
  sms: 92.00, 
  paid: true}, 

  {year: 2013,
  quarter: 4, 
  daily: 900.00, 
  sms: 85.00, 
  paid: false}
]

質問:すべてのクライアントを表示するスーパー管理者ビューのように、このコレクションからすべてのドキュメントを照会したいが、invoice-array から返される情報を「年」が特定の値に等しいオブジェクトに制限したいとします。たとえば、2013 年は現在の年です。

必要なのはプロジェクションだと思いますが、問題は、プロジェクションが最初に見つけた結果しか返さないことです...

4

4 に答える 4

-1

@JohnnyK が彼のコメントで述べたように、MongoDB集約フレームワークを使用する必要があります。

db.clients.aggregate([
  { $unwind: "$invoices" },
  { $match: { "invoices.year": 2013 } },
  { $group: { _id: "$_id", /* other client fields */, invoices: { $push: "$invoices" } } }
]);

最初に最初のinvoices配列を巻き戻し、次に指定された年の請求書のみを保持し、最後に一致した請求書をクライアント フィールドごとに配列にグループ化します。

于 2013-11-01T13:36:18.230 に答える