Как правильно использовать InsertMany Mongodb C# - PullRequest
0 голосов
/ 17 июня 2020

Привет, я не буду передавать некоторые данные Syntheti c в мою базу данных с помощью метода InsertMany, я написал текущий код:

My Main:

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

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

 }

Моя модель class:

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

Функция для синтетических c данных:

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);
        }

   }

Когда я запускаю code Я получаю сообщение об ошибке. E11000 - ошибка дублирования ключа. Я проверяю определение InsertMany, и он принимает аргументы IEnumerable<TDocument> documents. Это простой способ преобразовать List<T> в IEnumerable<TDocument>? Что мне нужно, чтобы изменить мою функцию Syntheti c или функцию InsertMultipleRecords. Есть предложения?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 18 июня 2020

После некоторых копаний я обнаружил, что объект, который я создаю в synthetic function, имеет тот же _id. Для этого мне нужно было изменить создание объекта внутри для l oop. И моей проблемы не было в 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;
}
...