1
我有兩個單獨的MongoDB集合search
和objects
,它記錄了一些用戶操作,如使用搜索頁面,並在我的網站觀看對象頁。 coollections雙方都有用戶的cookie存儲在相同的方式:MongoDB的合併結果來自兩個集合
{
"_id" : ObjectId("55ac35499db5acdb1c8b4567"),
...
"user" : {
"id" : "12007",
"cookie" : "LffDjUQHogfrihI2z/FlzQ",
},
"createddate" : ISODate("2015-09-20T02:39:53.780+0000")
}
現在我需要在這兩個集合一天一天算唯一用戶。 我知道如何在一個集合指望他們:
db.objects.aggregate([
{ "$group": {
"_id":{
"$subtract": [
"$createddate",
{ "$mod": [
{ "$subtract": [ "$createddate", ISODate("1970-01-01T00:00:00.000+00:00") ] },
1000 * 60 * 60 * 24
]}
]
},
'users' : {$addToSet : '$user.cookie'},
}
},
{$project: {_id : 0, date : '$_id', users : {$size : "$users"}}},
])
因此,有我一天一獨特的餅乾天數。這個問題是,並不是所有進行搜索的人都去了對象頁面(但其中一些人去),所以我需要每天通過兩個集合獲得獨特的Cookie集。 我可以從每個集合的唯一Cookie日常陣列和合並,指望他們對應用的一面,但我敢肯定,它可以在數據庫端完成。請幫忙。
的MongoDB不支持以任何方式「連接」。如果您需要這些信息在兩個來源中是獨一無二的,那麼您需要首先將其合併爲一個集合。真的,您的應用程序設計應該意識到這一點,並首先將所需的所有數據寫入單個集合。其他任何事情都只是解決方法和頭痛。修復設計。 BTW。只需使用'Date(0)',因爲您不需要整個'ISODate'事情。這只是一個幫手。 –
@BlakesSeven,感謝您的評論。是的,我知道有單一的收集這種需求是最好的,但現在我不能改變數據庫架構,並不得不使用兩個集合的報告。也許某種MapReduce可以提供幫助?還要感謝'Date(0)',它看起來好多了。 – aokozlov
事實依然存在,「這裏沒有加入」。至於mapReduce,有一個常見的誤解,認爲它執行連接的地方沒有。只有一種特殊情況在另一個集合,結果在那裏你可以「合併」或「減少」到輸出,但它並不適合每個人,和一個特殊的情況下,主要還是寫出來給另一收集你得到結果之前, 。你的問題基本上不清楚你輸入和最終輸出的格式。 –