我想知道如何检查与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