标签: mongodb-.net-driver

GridFS.Upload() 不上传流内容

以下示例代码:

using (var ms = new MemoryStream())
{
    var artifactContent = Encoding.UTF8.GetBytes("content of some file/upload/etc as string");
    ms.Write(artifactContent, 0, artifactContent.Length);

    // ms.Lenght > 0


    var gridFsCreateOptions = new MongoGridFSCreateOptions {ContentType = "text/plain"};
    var gridFsFileInfo = mongoGridFsDatabase.GridFS.Upload(ms, "Test.txt", gridFsCreateOptions);

    // stream is not uploaded and gridFsFileInfo.Lenght == 0
}
Run Code Online (Sandbox Code Playgroud)

fs.files集合被填充,但fs.chunks集合为空。

我的代码有什么问题?我在 Win8 上使用 MongoDB 2.4.7 和来自 NuGet 的官方 C# 驱动程序。

c# mongodb gridfs mongodb-.net-driver

0
推荐指数
1
解决办法
689
查看次数

c#mongodb区分大小写搜索

我有一个集合,我在其中存储用户的电子邮件和密码。

我显然不想要求用户插入他的电子邮件区分大小写并且与他第一次注册时完全一样。

我正在使用 mongodb 2.0 c# 驱动程序,我在重复它,因为我看到了用正则表达式编写的查询的解决方案,但恐怕我不能在这里使用它。

我的查询看起来像

var filter = Builders<ME_User>.Filter.And(
                                 Builders<ME_User>.Filter.Eq(u => u.Email, email),
                                 Builders<ME_User>.Filter.Eq(u => u.Password, password));
            ME_User foundUser = null;
            var options = new FindOptions<ME_User>
            {
                Limit = 1
            };
            using (var cursor = await manager.User.FindAsync(filter, options))
            {
                while (await cursor.MoveNextAsync())
                {
                    var batch = cursor.Current;
                    foreach (ME_User user in batch)
                        foundUser = user;
                }
            }
Run Code Online (Sandbox Code Playgroud)

我有一个混乱的问题,杀了我,但我不能让自己用小写再次保存这些数据,并且有 2 个相同内容的副本。另外,我希望电子邮件能够像用户插入的那样完全保存。

c# mongodb mongodb-.net-driver

0
推荐指数
1
解决办法
5958
查看次数

使用 C# mongo 驱动程序构建查询

我想知道如何使用 mongo 驱动程序构建复杂的查询。这是我的查询:

var builder = Builders<MongoNavFilter>.Filter;
var query = builder.Where(x => x.Link == link && x.SubLink == subLink);
if (some statement)
{
    var finalExpression = ...
    query = query & Builders<MongoNavFilter>.Filter.Where(finalExpression); 
}
if (onsale)
    query = query & Builders<MongoNavFilter>.Filter.Where(x => !(x.Promo == null && x.Promo == string.Empty));

var filters = _db.GetCollection<MongoNavFilter>("NavFilters").
                    Find(query).ToList();
Run Code Online (Sandbox Code Playgroud)

这段EF IQueryable代码工作正常,但我无法使用mongo driver. 谁能告诉我我做错了什么?

c# mongodb mongodb-.net-driver

0
推荐指数
1
解决办法
3495
查看次数

如何在 Mongo.Net 驱动程序中链接 FilterDefinitionBuilders

我有一个过滤器,我想将其添加到每个查询中,作为我要在数据库上执行的任何查询的基础。这意味着我不必记住添加过滤器(filter.Eq("deleted", false) & filter.Eq("another query", null)在我对集合进行的每次调用中。

过去使用其他流畅的接口,我假设我们可以简单地传递构建器,添加我喜欢的尽可能多的过滤器,直到我真正准备好执行查询,然后我会调用一个命令,.Build()这最终会给我我的FilterDefinition对象。

然而,当我尝试组合调用时,Eq()它只是立即转换为 a FilterDefinition,而不是将其保留为 aFilterDefinitionBuilder直到时间到来。这对于 Mongo 来说似乎相当不可扩展且目光短浅,因为添加.Build()功能将允许您以更灵活的方式链接命令。

首先,决定这样做有什么理由吗?我想了解为什么这样做,因为我知道人们不会随意做出这些决定。

其次,是否有人设法编写任何扩展方法来帮助我解决当前的困境,他们不介意分享。

我的第一次尝试是包含以下内容:

public static FilterDefinitionBuilder<TDocument>(this FilterDefinitionBuilder<TDocument> filter)
{
    var name = GetCollectionName<TDocument>();
    return filter.Eq("deleted", false);
}
Run Code Online (Sandbox Code Playgroud)

然后我会从一个包装函数中调用它,而不是调用静态Builders<CosmosDocumentType>.Filter函数,我会调用一个实用程序函数来包装它并返回一个FilterDefinitionBuilder我可以添加更多过滤器的对象。

完成后,我想调用一个.Build()方法,然后看到一个相当可爱且功能强大的FilterDefinition对象,它将从集合中获取我想要的文档。

有了这个.Build()还允许我查询集合中未删除的所有文档,而无需添加更多过滤器,因为目前这似乎是在 aFilterDefinitionBuilder和 a之间转换的唯一方法FilterDefinition

另一种选择是围绕功能编写我自己的 Fluent 包装器,并FilterDefinitionBuilder在最后当我对所有过滤器都已就位感到满意时运行它。

如果有一种方法可以将现有的过滤器从过滤器中取出,FilterDefinition那也可能会有所帮助。

c# mongodb mongodb-.net-driver

0
推荐指数
1
解决办法
5249
查看次数

我使用 MongoDB C# 驱动程序 FindAsync 的方式是否有缺陷?

对于 C# 来说还是比较陌生。我的代码给了我想要的结果,但我不确定我是否以正确的方式实现了它。如果您想回答,请详细说明。我的目标是通过 搜索我的 MongoDB 中的条目FindAsync。这是我的代码:

public async Task<List<T>> SearchDocAsync<T, U>(string collection,
    string findFieldName, U findValue)
{
    var _collection = db.GetCollection<T>(collection);
    var filter = Builders<T>.Filter.Eq(findFieldName, findValue);
    var result = await (_collection.FindAsync(filter).Result.ToListAsync());
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这是我在 WinForms 中的调用方式:

private async void BtnReadAll_Click(object sender, EventArgs e)
{
    var asyncResults = await myMongoAux.SearchDocAsync<MyTModel, string>(
        myCollectionName, "MyDBString", "TestString");
    foreach (var r in asyncResults)
    {
        RtxbxResult.Text += $"{r.MyDBInt}\t{r.MyDBString}\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

这安全吗?我不应该使用 a using(但如何使用)?我读过一些关于你应该使用的内容:

配置等待(假)

如何以及为何?

非常友善,帮助我了解更多。感谢您的时间。:)

c# using-statement winforms async-await mongodb-.net-driver

0
推荐指数
1
解决办法
6594
查看次数

如何使用c#查询从MongoDB获取Min和Max DateTime?

我使用MongoDB c#查询编写了Sorting的查询和DateTime的MAX和MIN记录.我写道

var server = MongoServer.Create(this.connectionString);
var db = server.GetDatabase(DATABASE);
var tblRskAlerts = db.GetCollection(RISKALERT_TBL);
var query = Query.And(Query.EQ("Entry", null));
var sort = tblRskAlerts.Find(query).SetSortOrder(SortBy.Ascending("Entry"));
var sort =SortBy.Ascending("Entry");
var fromDt = sort.Max(x => x["Entry"].ToJson());
var toDt = sort.Min(x => x["Entry"].ToJson());
txtToCal.Text = ((DateTime)toDt).ToLocalTime();
Run Code Online (Sandbox Code Playgroud)

现在我想要显示fromDt,toDt into Textboxes.但我得到错误,因为无法将String转换为DateTime.

mongodb mongodb-.net-driver

-3
推荐指数
1
解决办法
5599
查看次数