MongoDB如何检查是否存在

我想知道如何使用mongoDB和C#检查对象的存在。

我已经找到了一种方法,但是由于Any()方法,我不得不使用Linq,但是我想知道如果没有Linq可以做到这一点吗?

database.GetCollection("Applications").Find(Query.EQ("Name", applicationName)).Any() 

多谢你们!

使用$ count运算符来避免内存问题,它不会将数据库从数据库加载到内存中:

 int count = items.FindAs(Query.EQ("name", appName)).Count(); if(count > 0) { //then doc exists } 

mongodb中存在的 operator $可用于标识文档中存在某些字段,但您无法将查询传递给它:

 database.GetCollection("Applications") .Find(Query.Exists("Name", true)); 

最简单的类型/重构安全选项是使用带有AsQueryable LINQ *:

 var collection = database.GetCollection("Applications"); var exists = collection.AsQueryable().Any(avm => avm.Name == applicationName); 

这将创建一个count命令并validation它是否高于零。

在某些情况下(性能是一个问题)而不是计算所有匹配的文档,您可以简单地告诉MongoDB获取第一个并检查是否有一个:

 var collection = database.GetCollection("Applications"); var exists = collection.AsQueryable().FirstOrDefault(avm => avm.Name == applicationName) != null; 

正如Robert Stam指出的那样,在这种情况下, MongoCollection.ExistsQuery.Exists都无关紧要。


*从版本1.4(2012-03-27)开始,驱动程序支持LINQ查询(转换为mongo查询,因此没有内存问题)。

在2.x版本的驱动程序中检查是否存在的方法是:

 bool exists = collection.Find(_ => _.Name == applicationName).Any(); 

或异步:

 bool exists = await collection.Find(_ => _.Name == applicationName).AnyAsync();; 

MongoCollection.Exists检查集合本身是否存在,而不是特定文档是否存在。

Query.Exists($ exists的查询构建器版本)用于查询文档是否包含特定字段(按名称)。

没有“官方”方式来查询是否存在与查询匹配的文档,但Andrew Orsich建议使用count可能是最好的方法。 他们只是评论我要补充的是,如果你要处理匹配的文档,那么你也可以继续使用Find的一些变体来查询它们。

我会建议官方教程中描述的方法

http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

你可以找到并计算得到存在。

编辑:为了修复内存问题,似乎它“存在”MongoCollection对象中的Exists方法;)