标签: mongodb-.net-driver

如何对MongoDB中的多个嵌套数据字段进行查询

因此,我想做的是查询所有包含“巴黎”市“法国”州的文档。我需要进行某种连接,但我无法弄清楚如何构建它。

我正在使用 c# 驱动程序,但我很乐意接受使用任何方法的帮助。

{
    "_id" : ObjectId("519b407f3c22a73a7c29269f"),
    "DocumentID" : "1",
    "Meta" : [{
        "Name" : "City",
        "Value" : "Paris",
    }, {
        "Name" : "State",
        "Value" : "France",
    }
    }]
}

{
    "_id" : ObjectId("519b407f3c22a73a7c29269g"),
    "DocumentID" : "2",
    "Meta" : [{
        "Name" : "City",
        "Value" : "Paris",
    }, {
        "Name" : "State",
        "Value" : "Texas",
    }
    }]
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query mongodb-.net-driver

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

Mocking MongoCollection crashes - Exception has been thrown by the target of an invocation

I use Moq to mock the GetCollection method but the line crashes.

var collectionSettings = new MongoCollectionSettings
{
    GuidRepresentation = GuidRepresentation.Standard,
    ReadEncoding = new UTF8Encoding(),
    ReadPreference = new ReadPreference(),
    WriteConcern = new WriteConcern(),
    WriteEncoding = new UTF8Encoding()
};

var collection = new Mock<MongoCollection<BsonDocument>>(database.Object, "MyCollection", collectionSettings);

//crashing here without any error dumped
database.Setup(f => f.GetCollection("MyCollection", collectionSettings)).Returns(collection.Object);
Run Code Online (Sandbox Code Playgroud)

This is the error I got

Exception of type 'System.ArgumentOutOfRangeException' was thrown.
Parameter name: name
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at …
Run Code Online (Sandbox Code Playgroud)

c# nunit moq mongodb mongodb-.net-driver

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

如何在 MongoDB 中为不同的字段名称注册 ScalarDiscriminatorConvention?

我正在编写 C# 代码来从现有 MongoDB 数据库中提取数据并将其放入各种 C# 类中。数据库的一部分是多态的:如果字段type是 A,则该文档中将存在一组特定字段。如果type是B,则将存在一组不同的字段。这是 的完美用例ScalarDiscriminatorConvention,所以我正在使用ScalarDiscriminatorConvention("type"). 但我不知道如何让 MongoDB 驱动程序使用该约定!

关于约定的 MongoDB 手册页让我认为这可行:

var pack = new ConventionPack();
pack.Add(new CamelCaseElementNameConvention());
pack.Add(new ScalarDiscriminatorConvention("type"));

ConventionRegistry.Register(
    "My Custom Conventions",
    pack,
    t => t.FullName.StartsWith("MyNamespace."));
Run Code Online (Sandbox Code Playgroud)

但这会失败,因为它不像其他约定那样ScalarDiscriminatorConvention从接口派生。IConvention它派生自IDiscriminatorConvention,这是它自己的接口,但不派生自IConvention。并ConventionPack.Add期望一个IConvention参数。

那么如何注册不同的鉴别器字段呢?我已经翻阅 MongoDB 手册至少一个小时了,但我很茫然。他们似乎没有在我能找到的任何地方记录它。

c# mongodb mongodb-csharp-2.0 mongodb-.net-driver

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

为什么我的 .NET MongoDb 驱动程序查询速度非常慢?

我直接在 Mongo 中运行查询select all items where field1=x, field2 =y, and field3=z(Robomongo、CLI,等等),对数十万个项目只需要不到一秒的时间:

db.items.find( { 
    $and: [ 
        { CreatingOrgId: 1 }, 
        { LocationId: 941 },
        { StatusId: 1}
    ] 
} )
Run Code Online (Sandbox Code Playgroud)

然后,我尝试从 C# 驱动程序运行完全相同的东西,但它滞后了(只有“聚合过滤器”代码相关,其他所有内容都用于上下文):

FilterDefinition<BsonDocument> locationsFilter;  = Builders<BsonDocument>.Filter.Eq("LocationId", 941);
FilterDefinition<BsonDocument> orgFilter = Builders<BsonDocument>.Filter.Eq("CreatingOrgId", 1);
FilterDefinition<BsonDocument> statusFilter = Builders<BsonDocument>.Filter.Eq("StatusId", 1);

FilterDefinition<BsonDocument> aggregateFilter = locationsFilter & statusFilter & orgFilter;

        List<ItemViewModel> stuffList = mongoItemsCollection
                                             .Find(aggregateFilter)
                                             .Project(x => Mapper.Map<BsonDocument, StuffViewModel>(x))
                                             .ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

我在这里犯了什么错误?以下是 mongo 看到的查询:

在此输入图像描述

编辑:看起来将项目映射到项目对象是在某种程度上杀死我的查询的原因。如果没有映射,它的速度相当快(大量记录只需几秒钟),如下所示:

    var rawItems = mongoItemsCollection
                             .Find(aggregateFilter)
                             .ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

编辑2:看起来automapper是这里问题的一个重要部分(采用bson“item”对象并将其转换为.NET视图模型)。如果有人想回答的话,我仍然对 .NET --> …

mongodb mongodb-query mongodb-.net-driver

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

无法使用 mongocsharpdriver 2.7.0 连接到 MongoDb(使用身份验证)

我创建了一个示例 c# 控制台应用程序来连接到 Docker 上的 CentOS 计算机上托管的 mongodb。

用于创建容器的命令如下:

docker run -d --name mongodb-container -p 2020:27017 -v /home/mongodb_data:/var/lib/mongodb/data -v /home/mongodb_log:/var/log/mongodb -v /home/mongod. conf:/etc/mongod.conf -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=秘密 mongo

系统IP:172.17.103.158
Mongodb docker端口:2020

现在来看看 C# 代码

class users
    {
        [BsonId]
        public ObjectId _Id { get; set; }

        [BsonElement]
        public string name { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

MongoContext 类

public class MongoContext
    {
        IMongoClient _client;
        public readonly IMongoDatabase _database;

        public MongoContext()
        {
            MongoCredential credential = MongoCredential.CreateCredential(ConfigurationManager.AppSettings["MongoDatabaseName"], ConfigurationManager.AppSettings["MongoUsername"], ConfigurationManager.AppSettings["MongoPassword"]);

            var settings = new MongoClientSettings …
Run Code Online (Sandbox Code Playgroud)

c# mongodb docker mongodb-.net-driver asp.net-core-2.0

3
推荐指数
1
解决办法
2万
查看次数

将 mongo csharp 驱动程序与 View 结合使用

我有一个名为 test1 的视图,其中包含自定义的高级查询。

是否可以使用 mongo csharp 驱动程序将数据从名为 test1 的视图检索到 C# 应用程序?

信息:
*我是 MongoDB 和 mongo csharp 驱动程序的新手。

谢谢你!

c# mongodb mongodb-.net-driver

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

使用 C# 驱动程序通过 Elemmatch 查询 MongoDB

我在将查询(相对简单)从 Mongo Shell 转换为 C#(可以是 linq 或过滤器生成器)时遇到问题。我想按某些字段(在我的示例中EntityIdActivityDate和数组上存在的字段(在我的示例中UnCommonFields)进行查询。

数据示例:

{ 
    "_id" : ObjectId("5ded105e90424e1c0e6fda05"), 
    "EntryId" : NumberLong(1111111), 
    "EntityId" : "10000007", 
    "EntityType" : NumberInt(5), 
    "ActivityItemId" : "1,4,16172532", 
    "ActivityDate" : ISODate("2015-04-13T03:50:55.000-0400"), 
    "CreateDate" : ISODate("2017-12-13T19:07:07.757-0500"), 
    "UpdateDate" : ISODate("2017-12-13T19:07:07.757-0500"), 
    "ActivityItemStatus" : NumberInt(2), 
    "ActivityTypeId" : NumberInt(2), 
    "Currency" : "USD", 
    "Amount" : "-10.7800", 
    "ActivityItemDescription" : "Stackoverflow example", 
    "DisplayLevel" : NumberInt(10), 
    "UnCommonFields" : [   
        {
            "k" : "CardPresent", 
            "v" : NumberLong(2)
        }, 
        {
            "k" : "PreAuthDate", 
            "v" : ISODate("2015-04-11T08:47:05.000-0400")
        }, 
        {
            "k" : …
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-query mongodb-.net-driver

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

MongoDB 类有参数但没有配置

我有一个类,其中包含一些我想使用 mongodb 存储的只读属性。

用户.cs

public class User: ValueObject<User>
    {
        public UserId Id { get; }
        public string Firstname { get; }
        public string Lastname { get; }

        public User(UserId id, string firstname, string lastname)
        {
            Id = new UserId(id.Id);
            Firstname = firstname;
            Lastname = lastname;
        }

        public User(string id, string firstname, string lastname)
        {
            Id = new UserId(id);
            Firstname = firstname;
            Lastname = lastname;
        }

        protected override bool MembersEquals(User other)
        {
            return Id == other.Id && Firstname == other.Firstname && …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-csharp-2.0 mongodb-.net-driver

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

带有 UUID (GUID) 的 MongoDB C# 过滤器返回 0 结果

我有一个 MongoDB 集合“Posts”,其中包含如下数据:

{
 "_id": UUID('5fd671be-df7c-4dd2-87dc-9877a7fb1953'),
 "EditorId": UUID('f79fc0d8-0200-4eef-91c2-4062ee9a2354'),
"Name": "Name 01"
}
Run Code Online (Sandbox Code Playgroud)

在 C# 中,我尝试获取特定 EditorId 的所有记录,我尝试了以下操作:

BsonDefaults.GuidRepresentation = GuidRepresentation.Standard;

var postsCollection = _database.GetCollection<BsonDocument>("Posts");
var postsCollection2 = _database.GetCollection<Post>("Posts");
 
Guid editorId = ...
 
var postsDocs = postsCollection.Find(Builders<BsonDocument>.Filter.Eq("EditorId", editorObj.Id)).ToList();
var posts = postsCollection2.Find(p => p.EditorId == editorObj.Id).ToList();
Run Code Online (Sandbox Code Playgroud)

但这些方法都行不通,我没有结果!您对这个问题以及如何解决这个问题有任何想法吗?

谢谢

.net c# mongodb mongodb-.net-driver

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

Mongodb C#驱动程序-无法使用管理员身份验证来访问其他数据库

当您在MongoDB控制台中以管理员用户(管理员数据库的用户)身份登录时,便可以完全访问同一服务器上的任何数据库,而无需登录每个数据库。但是,如果我使用官方的C#驱动程序并提供到管理数据库的连接字符串,那么当我尝试访问任何其他数据库时,都会收到身份验证错误。这是在MongoServerInstance.AcquireConnection()中发生的,它试图重新验证连接并针对其他数据库(当然会失败)检查管理数据库凭据。

我想要实现的是-我提供了管理员连接字符串,无需访问每个数据库即可访问所有数据库,就像控制台一样

我可以做些什么来使C#驱动程序在身份验证方面与控制台相同?

mongodb mongodb-.net-driver

2
推荐指数
1
解决办法
1639
查看次数