标签: mongodb-.net-driver

MongoDB C#驱动程序database.GetCollection和魔术字符串

刚进入NoSQL的东西,请原谅我,如果这是一个简单的问题.我正在尝试使用通用存储库为更常见的操作实现存储库类型模式.

我遇到的一件事是杀死这个想法是为了获得你计划使用的集合,你必须传递一个字符串值作为集合的名称.

var collection = database.GetCollection<Entity>("entities");
Run Code Online (Sandbox Code Playgroud)

这意味着我必须对我的集合名称进行硬编码或在某处编写字典以充当查找,以便我可以将对象类型映射到集合名称.

别人怎么处理这个?

mongodb mongodb-.net-driver

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

复制一个 mongodb 集合

使用 C# 在同一台服务器上复制 Mongodb 中的集合的正确方法是什么?MongoVUE 有一个选项“重复集合”,C# 有类似的东西吗?

c# mongodb mongodb-.net-driver

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

MongoDb 2.6.1 错误:17444 - “旧点超出球形查询范围”

在我的 System ni 中将 MongoDb 升级到 2.6.1 后,有时会出现以下错误:

遗留点超出球形查询范围

错误代码 17444

在这里:https : //github.com/mongodb/mongo/blob/master/src/mongo/db/geo/geoquery.cpp#L73 我可以看到这是由 mongo db 由于某些无效数据引起的。

// The user-provided point can be flat.  We need to make sure that it's in bounds.
if (isNearSphere) {
    uassert(17444,
            "Legacy point is out of bounds for spherical query",
            centroid.flatUpgradedToSphere || (SPHERE == centroid.crs));
}
Run Code Online (Sandbox Code Playgroud)

但目前我无法弄清楚为什么以及如何防止它。

我的代码如下所示:

IEnumerable<BsonValue> cids = companyIds.ToBsonValueArray();


    return Collection.Find(
                            Query.And(
                               Query.In("CompanyId", cids),
                               Query.Near("Location", location.Geography.Longitude, location.Geography.Latitude, location.Radius / 6371000, true))).ToList();
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

QueryFailure 标志是传统点超出球形查询范围(响应为 {“$err”:“传统点超出球形查询范围”,“代码”:17444})。在 MongoDB.Driver.Internal.MongoReplyMessage 1.ReadFrom(BsonBuffer buffer, IBsonSerializationOptions …

mongodb mongodb-.net-driver

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

MongodbCursor ,如何遍历巨大的集合?

我有一个 MongoDb 数据库,里面有一个非常庞大的集合(超过 200 万个文档)。我想用游标迭代它。同样在迭代期间,我必须对当前文档执行一些操作。

var pending_push_cursor = collection.FindAllAs<PendingPush>();
foreach (PendingPush p_push in pending_push_cursor)
{
    operation_with(p_push)
}
Run Code Online (Sandbox Code Playgroud)

主要问题是操作将元素排入队列,并且希望在某些时刻迭代暂停(几秒钟),让操作在添加新元素之前处理一些元素。

有没有办法以某种方式迭代光标,我可以暂停它,然后再恢复?MongodbCursor 保存最后访问的项目?我只知道 foreach 迭代,但是有这样的迭代吗?

while(pending_push_cursor.isLast()){
    PendingPush p_push= pending_push_cursor.getNext()
    operation_with(p_push)
 }
Run Code Online (Sandbox Code Playgroud)

如果存在类似的东西,我可以保存查询的最后一个项目。提前致谢

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

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

BsonClassMapSerializer 已经为 AbstractClassSerializer 注册

我正在使用 Mongo c# 驱动程序 2.0,并且在为我的 Id 值对象注册 AbstractClassSerializers 时遇到了 BsonSerializer 注册问题。

MongoDB.Bson.BsonSerializationException:已经有一个为 HistoricalEventId 类型注册的序列化程序。

当我查看 BsonSerializer 时,我看到 BsonClassMapSerializer 已经为我的类型注册了。

在此处输入图片说明

我假设正在为我的实体类型创建一个 BsonClassMapSerializer 并且它还为 Id 字段创建一个 BsonClassMapSerializer 。有没有人遇到过这个?如果有帮助,Bson 序列化程序代码如下所示。

抱歉,如果格式错误,c# 似乎不能很好地显示。

HistoricalEventIdBsonSerializer

public class HistoricalEventIdBsonSerializer : ToObjectIdBsonSerializer<HistoricalEventId>
{
    public override HistoricalEventId CreateObjectFromObjectId(ObjectId serializedObj)
    {
        HistoricalEventId parsedObj;
        HistoricalEventId.TryParse(serializedObj, out parsedObj);
        return parsedObj;
    }
}
Run Code Online (Sandbox Code Playgroud)

ToObjectIdBsonSerializer

public abstract class ToObjectIdBsonSerializer<T> : AbstractClassSerializer<T> where T : class
{
    private static readonly Type _convertibleType = typeof(IConvertible<ObjectId>);
    public abstract T CreateObjectFromObjectId(ObjectId serializedObj);

    public override T Deserialize(BsonDeserializationContext context, …
Run Code Online (Sandbox Code Playgroud)

mongodb-.net-driver

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

在 C# MongoDB 2.0 中的多个字段上的项目

当字段以字符串数组的形式给出时,您如何在新的 MongoDB C# 驱动程序中对字段进行投影?我可以找到在单个领域进行投影的方法

collection.find(filter).Project(Builders<Category>.Projection.Include(fieldName)

我如何扩展它以获取一系列字段?。

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

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

BSON 文档到 FilterDefinition&lt;Bson&gt; MongoDb c# 驱动程序

如何将 a 转换BsonDocumentFilterDefinition<BsonDocument>实例?

它是由新的 MongoDb C# 驱动程序提供的类。

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

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

如何使用C#mongodb驱动程序2.0版在$ in运算符中使用?

我在以前的mongodb c#驱动程序中找到了很多如何使用$ in的示例,但是在2.0版本中找不到任何如何使用$ in的示例。

mongodb-.net-driver

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

MongoDB C# 驱动程序 2.1 中 GroupBy 上的 LINQ 选择

我在使用运行 Mongo 3.0 的 2.1 C# 驱动程序的 Mongo 上遇到以下 LINQ 表达式问题。选择 Id 工作正常但不选择 A。

以下简单测试演示了我遇到的错误。

不支持指定的方法。在 MongoDB.Driver.Linq.Processors.AccumulatorBinder.GetAccumulatorArgument(表达式节点)

如果它不受支持,有什么建议可以解决它而不必先展开可查询的吗?我知道我可以使用 mongo 聚合框架,但这不是我们想要的,因为我们在这里没有接触到它,而且我不希望在这个级别使用 mongo 特定的语法。

[Test]
    public void TestLinqSelectOnGroupBy()
    {
        MongoClient mongoClient = new MongoClient();
        var repo = mongoClient.GetDatabase("GroupSelect");

        var a = new A() { Id = "1", Group = "A" };
        var col = repo.GetCollection<A>("A");
        col.InsertOneAsync(a);
        var allA = col.AsQueryable(); // adding .ToArray(); will obviously make it work but that is not very efficient

        var works =  allA.GroupBy(x => x.Group).Select(x => x.First().Id).ToArray(); …
Run Code Online (Sandbox Code Playgroud)

linq mongodb mongodb-.net-driver

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

使用 MongoDB C# 驱动程序查询派生类型值

我正在从旧的旧版 MongoDB 驱动程序移植一些代码以使用新驱动程序,但遇到了问题。我有一个集合,其中包含来自公共基类的多个派生类型。以前,我能够使用派生类属性查询集合(使用基类型声明)并仅检索派生类文档。因此,鉴于这些课程:

[BsonDiscriminator(RootClass = true)]
[BsonKnownTypes(typeof(Cat),typeof(Dog))]
class Animal
{
    [BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
    public string Id { get; set; }

    public string Name { get; set; }
}

class Cat : Animal
{
    public bool LikesFish { get; set; }
}

class Dog : Animal
{
    public string FavouriteBone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以做类似的事情:

MongoCollection<Animal> animals = db.GetCollection<Animal>("Animals");
var q = Query<Cat>.EQ(c => c.LikesFish, true);
var catsThatLikeFish = animals.FindAs<Animal>(q).ToList();
Run Code Online (Sandbox Code Playgroud)

效果很好。

但是现在我必须输入过滤器并且无法再编译:

IMongoCollection<Animal> animals = db.GetCollection<Animal>("Animals");
var query = Builders<Cat>.Filter.Eq(c …
Run Code Online (Sandbox Code Playgroud)

.net c# mongodb mongodb-.net-driver

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