0

私は3つのコレクションを持っており、次のようなSQLクエリに似たクエリを実行したい

SELECT fp.userId, fp.orderId, productId, fp.request_Payment_ChargeTotal, 
fp.createdOn, u.referrerSite, COUNT(*), 
sum( fp.request_Payment_ChargeTotal ) AS total 
FROM `firstdata_payment_webservice` fp, userlicenses ul, users u 
WHERE u.userId = ul.userId
AND fp.response_TransactionResult = 'APPROVED' 
AND fp.request_Payment_ChargeTotal > 0 
AND ul.orderId = fp.orderId AND fp.createdOn 
BETWEEN cast( '2011-09-10' AS DATETIME ) 
AND cast( '2011-09-20' AS DATETIME )
GROUP BY u.referrerSite, productId WITH ROLLUP

doctrine mongodb odm で同様の操作を行うにはどうすればよいですか。

4

1 に答える 1

0

まあ、「JOIN」を適用することはMongoDBの意図ではありません。したがって、データを別の方法で構造化する必要があります。

db.users

  • ID
  • 名前
  • ライセンス (ハッシュ タイプとして保存)

db.orders

  • ID
  • created_on (日時型)
  • processing_on (日時型)
  • user_id (DBRef または ObjectId タイプの場合があります)
  • 製品 (オブジェクトを含む配列型として格納)
  • トランザクション (日時、Web サービス タイプなどの情報を含むハッシュ タイプとして保存)

MapReduce を使用すると、orders テーブルにクエリを実行することで、他のものをカウントできます。また、顧客に関するデータが必要な場合は、探しているユーザーの ObjectId の配列を使用して、別のクエリで行います。

于 2011-10-19T13:52:52.163 に答える