【问题标题】:using string for mongodb _id对 mongodb _id 使用字符串
【发布时间】:2016-10-17 19:57:54
【问题描述】:

我有一个使用 mongoimport 命令输入到我的 mongo 数据库中的 json 文档。 我将它的 _id 设置为“MyDocId”,在 mongo 中查看它,_id 设置正确。 在我的 C# 代码中,我想使用这个 _id 来阅读这个文档:

ObjectId id = ObjectId.Parse("MyDocId");

我在上面的代码中遇到了异常

【问题讨论】:

标签: c# mongodb


【解决方案1】:

您可能需要像这样在您的属性上使用 Bson 属性。

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

在这个已回答的问题中对这些属性有很好的解释

BsonId vs BsonRepresentation

【讨论】:

  • 它如何与过滤查询构建器一起使用? //不获取任何文档 collection.FindAsync(Builders.Filter.Where(x=>x.Id == "stringvalue")) //给出语法错误(不能公司 ObjectId & string)collection.FindAsync(建设者.Filter.Where(x=>x.Id == ObjectId.Parse("stringvalue")))
【解决方案2】:

ObjectId 解析将仅解析具有valid format 的字符串。在您的情况下,如果文档的 _id 是一个字符串,则不需要将其解析为 ObjectId,只需在查询中使用字符串值即可。

【讨论】:

  • 我像这样创建了一个过滤器:Builders.Filter.Eq("_id", this._docId) 我遇到了一个异常
  • 有什么异常?
【解决方案3】:

MongoDB.Driver 的 2.9 版开始,您还可以使用内置约定 StringIdStoredAsObjectIdConvention

        var pack = new ConventionPack
        {
            new StringIdStoredAsObjectIdConvention()
        };

        ConventionRegistry.Register("Custom Convention", pack, t => true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 2014-10-29
    • 2022-01-18
    • 2011-12-07
    • 2021-03-14
    • 2018-06-25
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多