Драйвер C# 2.0 Mongodb UpdateOneAsync


`

public class Student
{
    public long StudentId {get; set;}
    public string Fname {get; set;}
    public string Lname {get; set;}
    public List<ObjectId> CoursesList {get; set;}
    public int IQ {get;set;}
}

public class Courses
{
    [BsonId]
    public ObjectId Id { get; set; }
    public string CourseNumber{get; set;}
    public string CourseName{get; set;}
}

`

Как добавить / добавить идентификатор курсора в список курсов (который может быть нулевым в первый раз) объекта Student

PS: Я знаю, как установить поле, используя команду ниже. Я надеюсь, что он находится на аналогичных линиях для вышеупомянутой проблемы

await StudentCollection.UpdateOneAsync(a => a.StudentId == studentId, Builders<Student>.Update.Set( a => a.IQ,90));
2 5

2 ответа:

Как вы уже обнаружили, C# - код для использования $addToSet выглядит следующим образом:

var filter = Builders<Student>.Filter.Eq(s => s.StudentId, studentId);
var update = Builders<Student>.Update.AddToSet(s => s.CoursesList, courseId);
var result = await collection.UpdateOneAsync(filter, update);

Однако $addToSet не будет работать, если член CourseList был сохранен в коллекции как null. Сервер требует, чтобы существующее значение для $addToSet было массивом (это может быть пустой массив).

Самое простое решение-просто хранить пустой список для CoursesList вместо null, когда курсов нет.

Это работает на меня. Когда вы определяете "список" таким образом, он будет пустым и работает с методами AddToSet/Push.

public List<ObjectId> CoursesList = new List<ObjectId>();