【问题标题】:Inserting BSON Document into Collection (C#)将 BSON 文档插入集合 (C#)
【发布时间】:2018-02-18 18:56:06
【问题描述】:

我正在尝试将 BSON 文档插入到 Mongo 集合中。

MongoDB.Driver.MongoCommandException: '命令插入失败:解析错误 字段文档的元素 0 :: 由 :: '0' 字段的错误类型引起, 预期对象,找到 0: [ { 选区:“阿伯丁北部”,选举:“2010 大选”,选民:64808,多数:8361,ResultOfElection:“实验室 保持”,投票率:37701,投票率:100.0 } ]。'

下面是我的代码。

    public void retrieveElectionResuts(string url)
    {
        var client = new RestClient(url);
        var request = new RestRequest(Method.GET);
        request.AddHeader("Accept", "application/json");

        IRestResponse response = client.Execute(request);
        var con = response.Content;

        //Cleaning JSON format
        RootObject result = JsonConvert.DeserializeObject<RootObject>(con);
        List<Item> items = result.result.items;
        List<ConstituencyResult> electionResults = new List<ConstituencyResult>();
        MongoContext context = new MongoContext();
        var db = context.connect();
        var collection = db.GetCollection<BsonArray>("constituencyResult");
        foreach (Item item in items)
        {
            ConstituencyResult constituencyResult = new ConstituencyResult
            {
                Constituency = item.constituency.label._value.ToString(),
                Election = item.election.label._value.ToString(),
                Electorate = item.electorate,
                Majority = item.majority,
                ResultOfElection = item.resultOfElection,
                Turnout = item.turnout,
                TurnoutPercentage = ((item.electorate) / (item.turnout)) * 100               
            };


            BsonArray array = new BsonArray();
            array.Add(constituencyResult.ToBsonDocument());
            collection.InsertOne(array);


        }
    }

我曾尝试直接添加文档(即,不将其放入 BSON 数组中),但这仍然会引发错误。

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    您不能将BsonArray 添加到集合中,因为 MongoDB 文档是一组具有关联值的键。添加数组的时候,key应该是什么?

    您当然可以拥有一个包含数组的字段。可以通过以下方式添加:

    var collection = database.GetCollection<Object>("constituencyResult");
    collection.InsertOne(new
    {
        SomeArray = array
    });
    

    在这种情况下,文档将有 SomeArray 字段来保存数组数据。

    我尝试过直接添加文档(即,不将其放入 BSON Array),但这仍然会引发错误。

    如果建议的答案不是您需要的,并且在将ConstituencyResult 对象添加到集合时遇到异常,请使用ConstituencyResult 的定义和您遇到的异常更新您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多