【问题标题】:How to use InsertMany properly Mongodb C#如何正确使用 InsertMany Mongodb C#
【发布时间】:2020-10-07 12:49:22
【问题描述】:

您好,我不会使用 InsertMany 方法将一些合成数据传递到我的数据库,我已经编写了流动代码:

我的Main

static void Main(string[] args)
{
     MongoCRUD db = new MongoCRUD("testClass");

     List<GlobalUrbanPoint> syntheticData = CreateSunfeticData(20);
     db.InsertMultipleRecords<GlobalUrbanPoint>("geo3", syntheticData);

 }

我的模型课:

 public class GlobalUrbanPoint 
 {
     [BsonId]
      public ObjectId  Id{ get; set; }
      public string NAME { get; set; }
 }

合成数据的功能:

public static List<GlobalUrbanPoint> CreateSunfeticData(int NumberOfDocumet)
    {
        List<GlobalUrbanPoint> SyntheticList = new List<GlobalUrbanPoint>();

        var SyntheticObject = new GlobalUrbanPoint();
        for (var i = 1; i < NumberOfDocumet; i++)
        {
            SyntheticObject.NAME = (i+1).ToString();
            SyntheticList.Add(SyntheticObject);
        }


        return SyntheticList;
    }

对于我的操作,我使用 MongoCRUD

 public class MongoCRUD
    {
        private IMongoDatabase db;

        public MongoCRUD(string database)
        {
            var client = new MongoClient();
            db = client.GetDatabase(database);
        }

        public void InsertRecord<T>(string table, T record)
        {
            var collection = db.GetCollection<T>(table);
            collection.InsertOne(record);
        }

        public void InsertMultipleRecords<T>(string table, List<T> records) 
        {
            var collection = db.GetCollection<T>(table);
            collection.InsertMany(records);
        }

   }

当我运行代码时,我收到一个错误 E11000 重复密钥错误集合。我检查了 InsertMany 的定义,它需要参数IEnumerable&lt;TDocument&gt; documents。将List&lt;T&gt; 转换为IEnumerable&lt;TDocument&gt; 是一种简单的方法吗? 我需要更改我的合成函数或 InsertMultipleRecords 函数。有什么建议吗?

感谢您的宝贵时间。

【问题讨论】:

    标签: c# mongodb mongodb-query ienumerable


    【解决方案1】:

    经过一番挖掘,我发现我在synthetic function 中创建的对象具有相同的_id。为此,我需要在 for 循环内更改对象的创建。而我的问题不在InsertMultipleRecords

    public static List<GlobalUrbanPoint> CreateSunfeticData(int NumberOfDocumet)
    {
        List<GlobalUrbanPoint> SyntheticList = new List<GlobalUrbanPoint>();
    
        for (var i = 1; i < NumberOfDocumet; i++)
        {
            var SyntheticObject = new GlobalUrbanPoint();
            SyntheticObject.NAME = (i+1).ToString();
            SyntheticList.Add(SyntheticObject);
        }
        return SyntheticList;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多