首页 > 解决方案 > 如何正确使用 InsertMany Mongodb C#

问题描述

嗨,我不会使用 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 的定义,它需要 arguments IEnumerable<TDocument> documents。这是转换为的简单List<T>方法IEnumerable<TDocument>?我需要更改我的合成函数或 InsertMultipleRecords 函数。有什么建议吗?

感谢您的时间。

标签: c#mongodbmongodb-queryienumerable

解决方案


经过一番挖掘,我发现我创建的对象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;
}

推荐阅读