2014-10-03 45 views
1

我有幾個mongo查詢。MongoDB C#查詢執行位置

var threads = postCollection.AsQueryable<PostMongoEntity>() 
      .Select(w => w.ThreadId); 

var entities = threadCollection.AsQueryable<ThreadMongoEntity>() 
      .Where(e => e.ThreadId.In(threads)) 
      .OrderBy(e => e.Time) 
      .Skip(page * ThreadPageSize) 
      .Take(ThreadPageSize); 

第一個查詢查找所有線程ID來帖收集,第二得到所有的線程與該ID。我想知道這是否會在實際數據庫上做所有事情。這不是完整的查詢,但大部分重要的東西都在這裏。我擔心的部分是Where(e => e.ThreadId.In(threads))。它會將線程列表發送到數據庫,還是會獲取所有線程並進行本地過濾?

回答

1

它會將threadId的列表發送到MongoDB。 IT不會將所有記錄拉回並在本地進行過濾。我認爲這就是你想要的。

+0

是的,謝謝。 – DariusL 2014-10-14 14:52:39

0

那麼,從類型兼容性看起來合法。 threadsIQueryable實現IEnumerable,而操作In接受完全相同的IEnumerable(http://api.mongodb.org/csharp/1.9.2/

對不起只看用心在你的問題 但是! 顯然你需要使用long(或者什麼類型專用於PostMongoEntity中的Id)。因此,只有在In接受原始類型的IEnumerable而不是實體的情況下才合法。

P.S.此方法對PostMongoEntity鍵的數量有一些限制 - 無法快速找到確切的參考。