我想知道如何檢查與mongoDB和C#的對象的存在。MongoDB如何檢查存在
我已經找到了一種方法來做到這一點,但我不得不使用Linq感謝Any()方法,但我想知道是否有可能沒有Linq做到這一點?
database.GetCollection<ApplicationViewModel>("Applications").Find(Query.EQ("Name", applicationName)).Any()
謝謝你們!
我想知道如何檢查與mongoDB和C#的對象的存在。MongoDB如何檢查存在
我已經找到了一種方法來做到這一點,但我不得不使用Linq感謝Any()方法,但我想知道是否有可能沒有Linq做到這一點?
database.GetCollection<ApplicationViewModel>("Applications").Find(Query.EQ("Name", applicationName)).Any()
謝謝你們!
我會建議在官方教程
http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods
你可以找到再算上獲得生存所描繪的方法。
編輯: 對於固定內存問題,現在看來,這「存在」,在MongoCollection對象Exists方法;)
MongoCollection.Exists檢查集合本身是否存在,而不是是否存在特定文檔。
Query.Exists($存在的查詢生成器版本)用於查詢文檔是否包含特定字段(按名稱)。
沒有「官方」方式來查詢與查詢匹配的文檔是否存在,但Andrew Orsich使用count的建議可能是最好的方法。他們只評論我會補充說的是,如果您要處理匹配的文檔,那麼您可以繼續使用Find的一些變體進行查詢。
最簡單的,類型/重構安全的選擇是使用LINQ
*與AsQueryable
:
var collection = database.GetCollection<ApplicationViewModel>("Applications");
var exists = collection.AsQueryable().Any(avm => avm.Name == applicationName);
這將創建一個計數命令並驗證它是大於零。
在某些情況下(在性能是一個問題),而不是計數所有匹配的文檔,你可以簡單地告訴MongoDB
獲得第一,並檢查是否有一個:
var collection = database.GetCollection<ApplicationViewModel>("Applications");
var exists = collection.AsQueryable().FirstOrDefault(avm => avm.Name == applicationName) != null;
正如羅伯特·斯塔姆指出在這種情況下,MongoCollection.Exists
和Query.Exists
都是不相關的。
*從版本1.4(2012-03-27)驅動程序支持LINQ
查詢(轉換爲蒙戈查詢,因此不存在內存問題)。
這當然是正確的。有些人只是使用降價作爲懲罰。 – i3arnon
Mongo驅動程序不支持所有的linq查詢。 「不支持的過濾器:所有({document} {subscribers} .Where(({document} {userId}!= \」1234 \「)))。 –
檢查2中是否存在的方法。驅動程序的X版本是:
bool exists = collection.Find(_ => _.Name == applicationName).Any();
或異步:
bool exists = await collection.Find(_ => _.Name == applicationName).AnyAsync();;
爲什麼不LINQ? – Mauro
沒有Linq,因爲我不想處理內存中的元素列表。 – Gui