2017-03-04 63 views
-1

我正在試圖找到最快的方法來了解MongoDB中是否存在大量文檔。我不需要文件本身,只是確認它們的存在。MongoDB/C#:檢查數組中是否存在沒有返回的文檔

假設我有這樣的名單:

var L = new List<string> {"1", "3", "A"}; 

,我想找到是否存在這些文件。

一種方法做的是像這樣(語法可能有點過,因爲我想這個從內存中,但這個想法是有):

find(Query.In(_ => _._id, L)); 

和它的作品,但它返回所有文件以及,這是一個時間

浪費所以,我只得到了IDS,通過投影:

find(Query.In(_ => _._id, L)).Project(Projection.Expression(_ => _._id)); 

,這工作得很好,返回我現有的ID的列表。

問題是:找到/項目效率高嗎?還是有更快的方法來實現相同?

(獎金問題:我該怎麼辦query.in用流利的語法:)?)

+0

不知道你正在使用MongoDB的驅動程序的版本,但V2.4有一個接受FilterDefinition的Count()方法。這應該讓你得到你需要的數量。 –

+0

我有3.4;伯爵將無法告訴我哪些文件存在,但有多少。 – Thomas

回答

0

你正在做它的方式是,在我的opiniion確定。我也會這樣做。 Project步驟在服務器上執行,所以你不會得到完整的文檔,只是Ids,這是你想要的。

你就可以用流利的語法相同的查詢,它只是(我假設在collection變量您的收藏):

collection.Find(_=>L.Contains(_._id)).Project(_=>_.Id).ToList();