Joh*_*ohn 16 .net c# mongodb mongodb-.net-driver
我想知道如何使用mongoDB和C#检查对象的存在.
我找到了一种方法,但是由于Any()方法,我不得不使用Linq,但是我想知道如果没有Linq可以做到这一点吗?
database.GetCollection<ApplicationViewModel>("Applications").Find(Query.EQ("Name", applicationName)).Any()
Run Code Online (Sandbox Code Playgroud)
多谢你们!
And*_*ich 18
使用$ count运算符来避免内存问题,它不会将文档从数据库加载到内存中:
int count = items.FindAs<LedgerDocument>(Query.EQ("name", appName)).Count();
if(count > 0)
{
//then doc exists
}
Run Code Online (Sandbox Code Playgroud)
mongodb中存在的 operator $可用于标识文档中存在某些字段,但您无法将查询传递给它:
database.GetCollection<ApplicationViewModel>("Applications")
.Find(Query.Exists("Name", true));
Run Code Online (Sandbox Code Playgroud)
i3a*_*non 11
在 2.x 版本的驱动程序中检查是否存在的方法是:
bool exists = collection.Find(_ => _.Name == applicationName).Any();
Run Code Online (Sandbox Code Playgroud)
或异步:
bool exists = await collection.Find(_ => _.Name == applicationName).AnyAsync();;
Run Code Online (Sandbox Code Playgroud)
最简单的类型/重构安全选项是使用LINQ
*with AsQueryable
:
var collection = database.GetCollection<ApplicationViewModel>("Applications");
var exists = collection.AsQueryable().Any(avm => avm.Name == applicationName);
Run Code Online (Sandbox Code Playgroud)
这将创建一个count命令并验证它是否高于零.
在某些情况下(性能是一个问题)而不是计算所有匹配的文档,你可以简单地告诉MongoDB
得到第一个并检查是否有一个:
var collection = database.GetCollection<ApplicationViewModel>("Applications");
var exists = collection.AsQueryable().FirstOrDefault(avm => avm.Name == applicationName) != null;
Run Code Online (Sandbox Code Playgroud)
正如罗伯特·斯塔姆指出,无论是MongoCollection.Exists
和Query.Exists
在这种情况下无关紧要.
*从版本1.4(2012-03-27)开始,驱动程序支持LINQ
查询(转换为mongo查询,因此没有内存问题).
归档时间: |
|
查看次数: |
23730 次 |
最近记录: |