2011-12-11 58 views
4

我有兩個不同的集合,它們有一個通用字段,比如UserId。還有其他屬性可以限制UserIds。在MongoDB中執行一組差異

例如:

Collection 1: {UserId, SellsToUserId}

Collection 2: {UserId, BuysFromUserId}

我想運行這給了我兩個集合之間的差異相當的運算。

示例查詢將爲: 獲取給定UserId銷售給的所有用戶標識,但不是從中購買。

在僞

var sellToCursor = collection1.Find(Query.EQ("UserId", Me)).SetFields({SellsToUserId}); 

var buyFromCursor = collection2.Find(Query.EQ("UserId", Me)).SetFields({BuysFromUserId}); 

SellToButDontBuyFrom[] = sellTo - buyFrom; //definitely pseudocode here. 

我想這樣做MongoDB服務器上,因爲我有大型數據集的解決方案。

任何建議要以有效的方式做到這一點?

回答

3

您可以使用javascript執行相同的邏輯並在服務器上執行它,但速度不會更快。如果你的C#客戶端對服務器有一個快速的帶寬,它將是更好的選擇。爲了優化它,您可以分別通過SellsToUserId和BuysFromUserId對兩個查詢進行排序,並通過兩個類似於合併排序算法的迭代器對其進行排序,在sellToCursor到達結尾時您可以停止該排序算法。

+0

很好的答案,很好的觸摸添加合併排序建議。 –