Документ MongoDB неправильно сопоставляется с объектом C#.C#

Место общения программистов C#
Ответить
Anonymous
 Документ MongoDB неправильно сопоставляется с объектом C#.

Сообщение Anonymous »

ВОПРОС
У меня возникла следующая проблема с ДЕМО-КОДОМ (ниже):
При выполнении строка ниже...

Код: Выделить всё

var customer = collection.Find(filter).FirstOrDefault();
... следующая ошибка...

Код: Выделить всё

System.FormatException: An error occurred while deserializing the Header property of class Customer: Element 'id' does not match any field or property of class Header.
---> System.FormatException: Element 'id' does not match any field or property of class Header.
... происходит.
ПЛЮС:
Если я добавлю декоратор "[BsonIgnoreExtraElements]" для классов "Customer" и "Header", запрос выполняется без ошибок, но "header.id" имеет значение "null"...

Код: Выделить всё

[Customer]
Id [string] = "65d5fa85e4eb515ee6f6301a"
GivenName [string] = "Renata"
[Header]
Id [string] = null
ДОКУМЕНТ MONGODB (ЗАПИСЬ)

Код: Выделить всё

{
"_id": {
"$oid": "65d5fa85e4eb515ee6f6301a"
},
"given_name": "Renata",
"address_filled": false,
"header": {
"id": "0945f7cd-16a8-4ea6-b87f-c24e90dcfbc6"
}
}
ДЕМО-КОД
Цель приведенного ниже кода — запросить документ MongoDB по идентификатору его заголовка вложенный документ с помощью пакета MongoDB.Driver и сопоставьте возврат с классом C# (с помощью MongoDB.Bson).
КЛАССЫ C# ДЛЯ СОПОСТАВЛЕНИЯ ДОКУМЕНТА MONGODB (ЗАПИСЬ)

Код: Выделить всё

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

public class Header
{
[BsonElement("id")]
public string Id { get; set; }
}

public class Customer
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public ObjectId Id { get; set; }

[BsonElement("given_name")]
public string GivenName { get; set; }

[BsonElement("address_filled")]
public bool AddressFilled { get; set; }

[BsonElement("header")]
public Header Header { get; set; }
}
КОД ДЛЯ ВЫПОЛНЕНИЯ ЗАПРОСА MONGODB
Используйте MongoDB.Driver для запроса документа по идентификатору в заголовке вложенный документ:

Код: Выделить всё

using MongoDB.Driver;
using System;

class Program
{
static void Main(string[] args)
{
// Connection string and database setup
var connectionString = "your_connection_string";
var client = new MongoClient(connectionString);
var database = client.GetDatabase("customers");
var collection = database.GetCollection("customers");

// Query to find the document by header id
var filter = Builders.Filter.Eq("header.id", "0945f7cd-16a8-4ea6-b87f-c24e90dcfbc6");

// Execute the query
var customer = collection.Find(filter).FirstOrDefault();

// Display the result
if (customer != null)
{
Console.WriteLine($"Customer Name: {customer.GivenName}");
Console.WriteLine($"Header ID: {customer.Header.Id}");
}
else
{
Console.WriteLine("Customer not found.");
}
}
}

ОБЪЯСНЕНИЕ

  • MongoClient: создает соединение с вашим экземпляром MongoDB.
    GetDatabase: извлекает базу данных по имени.
  • GetCollection: получает коллекцию с именем customer. code>.
  • Builders.Filter.Eq: создает фильтр для поиска документа, в котором header.id равен указанному значению.
  • Builders.Filter.Eq: создает фильтр для поиска документа, в котором header.id равен указанному значению.
  • Builders.Filter.Eq: создает фильтр для поиска документа, в котором header.id равен указанному значению.
  • Builders.Filter.Eq. li>
    Найти: выполняет запрос, а функция FirstOrDefault возвращает первый соответствующий документ или значение NULL, если совпадение не найдено.
    < li>BsonElement: сопоставляет свойство с соответствующим полем в документе MongoDB.
В этом примере демонстрируется запрос к коллекции MongoDB с помощью header.id и сопоставить результат с объектом C# с помощью пакетов MongoDB.Driver и MongoDB.Bson.

Спасибо. ! 🤗

Подробнее здесь: https://stackoverflow.com/questions/788 ... arp-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»