能否对通过DBRef存储的数据进行聚合?
Mongo 2.6
假设我有如下交易数据:
{
_id : ObjectId(...),
user : DBRef("user", ObjectId(...)),
product : DBRef("product", ObjectId(...)),
source : DBRef("website", ObjectId(...)),
quantity : 3,
price : 40.95,
total_price : 122.85,
sold_at : ISODate("2015-07-08T09:09:40.262-0700")
}
技巧在于,“source”具有多态性质——它可以是不同的$ref值,比如“webpage”、“call_center”等,这些值也具有不同的ObjectIds。例如DBRef(“webpage”,ObjectId(“1”))和DBRef(“webpage”,ObjectId(“2”))将是两个不同的网页,其中一个交易发生。
我最终想按源聚合一段时间(比如一个月)的数据:
db.coll.aggregate( { $match : { sold_at : { $gte : start, $lt : end } } },
{ $project : { source : 1, total_price : 1 } },
{ $group : {
_id : { "source.$ref" : "$source.$ref" },
count : { $sum : $total_price }
} } );
技巧是,如果您尝试使用以 $ 开头的变量进行分组或尝试通过项目使用表达式进行转换,则会出现路径错误。
有没有什么办法可以解决这个问题?实际上,我正在尝试通过聚合将此数据推送到子集合中,在那里对其进行操作。试图避免对数百万条记录进行大规模游标操作,以便我可以对其进行聚合。