标签: mongodb-.net-driver

插入不创建ID?

我用getter和setter创建了一个简单的对象:

public class MemberCanonical : IMemberCanonical
{
    public ObjectId Id { get; set; }
    public String username { get; set; }
    public String email { get; set; }
    public String status { get; set; }
    public IEnumerable<string> roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我想在数据库中插入一个新成员:

try
{
    memberObj.username = username;
    memberObj.email = email;
    memberObj.status = "active";
    // memberObj.Id = new ObjectId().ToString();
    this.membershipcollection.Insert(memberObj, SafeMode.True);
    return true;
}
catch(Exception ex)
{
    return false;   
}
Run Code Online (Sandbox Code Playgroud)

我希望insert能够创建一个唯一的_id(Id),但这并没有发生.当我查看_id字段时插入,我得到"0000000 ...."

为了让Mongo在插入时生成自己的_id,我需要做什么?

c# mongodb mongodb-.net-driver

8
推荐指数
1
解决办法
5994
查看次数

MongoDB C# - 如何将任意JSON文档保存为动态类型?

我正在尝试编写一个通用的Web Api控制器,它允许我将JSON文档保存到集合中而不指定C#类型.我试图将代码压缩到基本要素:

public class PassThroughController : ApiController
{
    [Route("api/mongodb/{collection}")]
    public void Post(string collection, dynamic document)
    {
        const string connectionString = "mongodb://localhost";

        var client = new MongoClient(connectionString);
        var db = client.GetServer().GetDatabase("SampleDb");
        var mongoCollection = db.GetCollection(collection);

        mongoCollection.Save(document,
            new MongoInsertOptions
            {
                WriteConcern = WriteConcern.Acknowledged
            });
        }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试发布一个简单的文档:

{ id: "2112", name: "Rush" }
Run Code Online (Sandbox Code Playgroud)

但无论我发送给方法的是什么,我都会收到与此类似的错误:"保存只能用于具有Id的文档."

我们尝试了Id(Id,id,_id)的许多不同属性,但它们都会导致类似的问题.

有任何想法吗?

谢谢

mongodb-.net-driver

8
推荐指数
2
解决办法
8546
查看次数

旧的.net驱动程序MongoCollection.Save的新选择?

我有一些C#代码使用旧的1.x版本的MongoDB驱动程序,它提供了使用该MongoCollection.Save()方法的通用保存方法.但是在升级到2.0之后,这个方法似乎已经消失,并被一个Update方法所取代,该方法需要指定对象上的所有更新字段(这对于通用方法显然没有好处......)

如何在2.0驱动程序中保留旧Save方法的功能(即只传入一个对象以更新所有字段)?

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

8
推荐指数
1
解决办法
1802
查看次数

使用C#驱动程序分页MongoDB查询

我使用的是用于C#的2.2版MongoDB驱动程序.我想对查询进行分页:对查询的响应必须包含当前页面的项目以及与查询匹配的项目总数.

我想做一个查询.使用mongo shell我可以意识到:

var c = db.mycol.find({....}).skip(0).limit(10)
var total = c.count();
while (c.hasNext()) {
   print(tojson(c.next()));
}
Run Code Online (Sandbox Code Playgroud)

但是使用C#驱动程序,我不知道如何只使用一个查询.

var find = collection
  .Find(x => x.Valid == true)
  .Skip(0)
  .Limit(10);

var cursor = await find.ToCursorAsync(cancellationToken);
// How to get the count? There is no method in the IAsyncCursor interface.
Run Code Online (Sandbox Code Playgroud)

可能吗 ?一些想法?

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

8
推荐指数
1
解决办法
8075
查看次数

使用c#驱动程序2.2.3关闭mongoDb服务器

使用以前版本的C#驱动程序(1.x),我可以这样做:

var client = new MongoClient(settings);
var server = client.GetServer();
server.Shutdown();
Run Code Online (Sandbox Code Playgroud)

如何使用驱动程序版本2.2.3执行此操作?

更新

我能找到的最好的东西是这样的:

try
{
    var client = new MongoClient(settings);
    var adminDatabase = client.GetDatabase("admin");
    var cmd = new BsonDocument("shutdown", 1);
    adminDatabase.RunCommand<BsonDocument>(cmd);
}
catch (MongoConnectionException e)
{
    if (!(e.InnerException is EndOfStreamException))
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我真的不喜欢这个,Try/catch等......

c# mongodb mongodb-.net-driver

8
推荐指数
1
解决办法
778
查看次数

带LINQ的.NET驱动程序:NotSupportedException:$ project或$ group

以下查询有效:

return Database
    .GetCollection<MyEntity>()
    .AsQueryable()
    .Where(x => x.StartDate <= instance && x.EndDate >= instance)
    .GroupBy(x => x.Key.Guid)
    .Select(x => x.First().Id)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

但是,当添加$ in条件(见下文)时,抛出以下异常:

应用程序抛出了未处理的异常.System.NotSupportedException:$ project或$ group不支持First({document} {_ id})

return Database
    .GetCollection<MyEntity>()
    .AsQueryable()
    .Where(x => guidKeys.Contains(x.Key.Guid)) // $in condition
    .Where(x => x.StartDate <= instance && x.EndDate >= instance)
    .GroupBy(x => x.Key.Guid)
    .Select(x => x.First().Id)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

我知道驱动程序尚不支持很多LINQ,但我无法理解如何引入添加匹配阶段(使用$ in)可能导致分组阶段不兼容.

有人能够解释为什么会这样吗?

我使用MongoDB 3.2和.NET驱动程序2.2.2.

编辑:

MyEntity 看起来像这样:

[BsonIgnoreExtraElements]
public class MyEntity: BaseMongoDocument
{
    [BsonId]
    [BsonRepresentation(BsonType.Binary)]
    public Guid Id { get; set; }

    [BsonRequired]
    [BsonElement("startDate")]
    public …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query mongodb-.net-driver

8
推荐指数
0
解决办法
935
查看次数

使用特定顺序在 mongoDB 中排序

Clients我目前正在寻找基于数组的特定顺序对子文档进行排序。

mongoDB的结构是

{
    "_id" : "1033",
    "Name" : "Test",
    "Clients" : [ 
        {
            "Id" : 1033,
            "Types" : [ 
                {
                    "Class" : "C",
                    "Service" : null
                },
                {
                    "Class" : "B",
                    "Service" : null
                }
            ]
        }, 
        {
            "Id" : 156136,
            "Types" : [ 
                {
                    "Class" : "A",
                    "Service" : null
                }, 
                {
                    "Class" : "B",
                    "Service" : null
                }, 
                {
                    "Class" : "C",
                    "Service" : null
                }, 
                {
                    "Class" : "D",
                    "Service" : null
                }
            ]
        }
    ] …
Run Code Online (Sandbox Code Playgroud)

c mongodb mongodb-.net-driver

8
推荐指数
2
解决办法
2388
查看次数

使用 C# 获取和添加/更新多级嵌入/嵌套 MongoDB 文档

如何使用 C# 过滤和添加/更新 mongodb 文档的第三、第四级子级。我可以添加/更新到第二级,但不能更进一步。请为我提供解决方案或任何可以从哪里获得帮助的参考资料。除了builders..Elemmatch之外,还有其他方法可以做到吗?

这是我的课程和代码:

namespace CrudWithMultilvelNestedDoc
{
    public class Channel
    {
        [BsonId]
        [BsonRepresentation(BsonType.String)]
        public string Id { get; set; }
        public string Name { get; set; }
        public Episode[] Episodes { get; set; }
    }

    public class Episode
    {
        [BsonId]
        [BsonRepresentation(BsonType.String)]
        public string Id { get; set; }
        public string Name { get; set; }
        public Track[] Tracks { get; set; }
    }

    public class Track
    {
        [BsonId]
        [BsonRepresentation(BsonType.String)]
        public string Id { get; set; }
        public string …
Run Code Online (Sandbox Code Playgroud)

c# linq mongodb mongodb-.net-driver

8
推荐指数
1
解决办法
519
查看次数

使用“多类型”属性序列化 Json 对象

我正在关注使用 ASP.NET Core 和 MongoDB教程创建 Web API

而且我缺少一些非常基本的东西,即如何序列化具有可能是“多类型”属性的 Json 对象。也就是说,这个属性可以是一个字符串,也可以是另一个对象。

这是教程中的原始 Json 示例:

{
  "_id" : ObjectId("5bfd996f7b8e48dc15ff215d"),
  "Name" : "Design Patterns",
  "Author" : "Ralph Johnson"
}
Run Code Online (Sandbox Code Playgroud)

这是教程中的原始 POCO 模型:

public class Book
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }

    [BsonElement("Name")]
    public string BookName { get; set; }
    public string Author { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我在 WebApi 控制器上调用“发布”和“获取”操作时,原始 Json 模型被正确序列化为 Book 实例,保存到数据库中并按预期从 Web 服务中正确检索。

但是,我需要添加一个“MultiUse”属性,其中MultiUse可以是字符串或对象,也可以是其他内容,例如:

{
 "_id" : ObjectId("5bfd996f7b8e48dc15ff215d"),
 "Name" : "Design …
Run Code Online (Sandbox Code Playgroud)

c# json mongodb mongodb-.net-driver asp.net-core

8
推荐指数
1
解决办法
512
查看次数

如何将此 MongoDB(聚合)查询写入 C#

我需要使用 MongoDB 中的运算符执行分组$max。我找出了在 MongoDB 数据库中运行的查询,但无法使用 C# 编写相同的查询。

db.getCollection('Employee').aggregate(
[  
    {$unwind : "$Projects"},
    {
        "$group" : {
            "_id" : "$EmpId",
            "LastUpdated" : {"$max" : "$Projects.LastUpdated"}
        }
    }
]);
Run Code Online (Sandbox Code Playgroud)

下面的 C# 代码出现错误:

“项目”不是有效的财产。

db.getCollection('Employee').aggregate(
[  
    {$unwind : "$Projects"},
    {
        "$group" : {
            "_id" : "$EmpId",
            "LastUpdated" : {"$max" : "$Projects.LastUpdated"}
        }
    }
]);
Run Code Online (Sandbox Code Playgroud)

c# mongodb aggregation-framework mongodb-.net-driver

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