Вставить документ внутри другого документа

#c# #mongodb #mongodb-.net-driver

#c# #mongodb #mongodb-.net-driver

Вопрос:

как я могу вставить документ внутри другого документа с помощью mongodb?

Я пробовал что-то вроде приведенного ниже кода, но у меня всегда возникает проблема с преобразованием моего списка настроек в настройках поля:

 var settingViewModels = new[]{ setting };
var query = Query.EQ("Name", applicationName);
var update = Update.AddToSet("Settings", BsonArray.Create(setting));
db.Collection<Applications>().Update(query, update, UpdateFlags.Upsert, SafeMode.True)
  

Я получил сообщение об ошибке при преобразовании моих settingViewModels в BsonArray со словами:

.NET введите MyProject.SettingViewModel не может быть отображен в BsonType.Имя параметра массива: значение

Есть идеи?

спасибо , Джон

Комментарии:

1. Каков тип установочной переменной?

2. вот объект настройки: открытый класс SettingViewModel { открытый идентификатор Guid { get; set; } открытый строковый ключ { get; set; } открытое строковое значение { get; set; } }

Ответ №1:

Если вы хотите добавить элемент настройки в массив Settings[] коллекции приложений, вам следует использовать ToBsonDocument() метод расширения из MongoDB.Bson пространства имен:

 var update = Update.AddToSet("Settings", setting.ToBsonDocument());
  

Вам не нужно создавать BsonArray .

Комментарии:

1. Привет, я попробовал ваше решение и получаю новую ошибку: Safemode обнаружил ошибку: Не удается применить модификатор $ addToSet к не-массиву (ответ: { «err» : «Не удается применить модификатор $ addToSet к не-массиву», «code»: 12591, «n»: 0, «connectionId»: 1174, «ok»: 1 }) Вот моя копия-вставка вашего кода: var query = Query.EQ(«Имя», ApplicationName); var update = Обновить. addToSet(«Настройки», настройка. ToBsonDocument()); db.Collection<Приложения>().Update(запрос, обновление, флаги обновления. Выполнить Upsert, безопасный режим. Верно)

2. @JohnSmith: Это потому, что поле «Настройки» не является массивом в вашем документе приложения, но должно быть .. Можете ли вы обновить свой вопрос примером документа «Приложение»?

3. Эндрю, ты король mongodb