доктрина mongodb odm группа запросов по - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть 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

Как мне сделать аналогичную операцию в доктрине mongodb odm.

1 Ответ

0 голосов
/ 19 октября 2011

Что ж, применение «JOIN» не является целью MongoDB. Таким образом, вы должны структурировать свои данные по-другому.

db.users

  • ID
  • имя
  • лицензии (хранятся в виде хеш-типа)

db.orders

  • ID
  • create_on (тип Datetime)
  • processing_on (тип Datetime)
  • user_id (может быть тип DBRef или ObjectId)
  • продукты (хранятся в виде типа Array, содержащие объекты)
  • транзакция (хранится в виде типа Hash, с информацией, такой как datetime, тип веб-сервиса и другие данные)

С MapReduce вы можете посчитать другие вещи, запросив таблицу заказов. А если вам нужны данные о клиентах, сделайте это в другом запросе, используя массив искомых идентификаторов пользователей.

...