Я совершенно новичок в mongoDB и изучаю основы.Я использую драйвер .NET (2.7.2) mongoDB и Robo 3T в качестве служебной программы для управления базами данных вручную.Я создал TestDB
базу данных, в которой создал myCollection
, где у меня есть много тестовых документов, таких как:
/* 1 */
{
"_id" : ObjectId("5c124ee01c2477487574b212"),
"x" : 1.0
}
/* 2 */
{
"_id" : ObjectId("5c17d26369babb0c04610a33"),
"count" : 1
}
/* 3 */
{
"_id" : ObjectId("5c17d40f6002a11c44bc2c42"),
"name" : "MongoDB",
"type" : "Database",
"count" : 1,
"info" : {
"x" : 203,
"y" : 102
}
}
/* 4 */
{
"_id" : ObjectId("5c17dead9e83de138c71278a"),
"counter" : 0
}
/* 5 */
{
"_id" : ObjectId("5c17dead9e83de138c71278b"),
"counter" : 1
}
/* 6 */
{
"_id" : ObjectId("5c17dead9e83de138c71278c"),
"counter" : 2
}
/* 7 */
{
"_id" : ObjectId("5c17dead9e83de138c71278d"),
"counter" : 3
}
/* 8 */
{
"_id" : ObjectId("5c17dead9e83de138c71278e"),
"counter" : 4
}
/* 9 */
{
"_id" : ObjectId("5c17dead9e83de138c71278f"),
"counter" : 5
}
/* 10 */
{
"_id" : ObjectId("5c17dead9e83de138c712790"),
"counter" : 6
}
/* 11 */
{
"_id" : ObjectId("5c17dead9e83de138c712791"),
"counter" : 7
}
/* 12 */
{
"_id" : ObjectId("5c17dead9e83de138c712792"),
"counter" : 8
}
/* 13 */
{
"_id" : ObjectId("5c17dead9e83de138c712793"),
"counter" : 9
}
/* 14 */
{
"_id" : ObjectId("5c17dead9e83de138c712794"),
"counter" : 10
}
и т. Д. ... В моем консольном приложении (в сообществе Visual Studio 2017)Я создал два класса, как это:
public class MyClass
{
[BsonId]
public ObjectId ID { get; set; }
public string name { get; set; }
public string type { get; set; }
public int count { get; set; }
public List<Info> info { get; set; }
}
public class Info
{
public int x { get; set; }
public int y { get; set; }
}
Я хотел бы получить документ из базы данных, который помечен как /* 3 */
в моих данных примера, который является более сложным.Программа, в которой я пытаюсь получить данные в основном методе, выглядит следующим образом:
static void Main(string[] args)
{
var client = new MongoClient();
var database = client.GetDatabase("TestDB");
var collection2 = database.GetCollection<MyClass>("myCollection");
var o = collection2.Find(i => i.name == "MongoDB").SingleOrDefault();
Console.ReadLine();
}
Когда я запускаю приложение, я получаю эту ошибку: System.FormatException:"An error occurred while deserializing the info property of class TEST_MongoDB_consoleApp.MyClass: Cannot deserialize a 'List<Info>' from BsonType 'Document'."
Что я делаю не так?
Я также создал этот класс (для менее сложных документов в myCollection
):
public class TestModel
{
[BsonId]
public ObjectId IDTestmodel { get; set; }
public int counter { get; set; }
}
, и я могу десериализовать его и получить его из базы данных без каких-либо проблем при выполнении этого жеспособ с MyClass
, который выглядит следующим образом:
static void Main(string[] args)
{
var client = new MongoClient();
var database = client.GetDatabase("Test");
var collection = database.GetCollection<TestModel>("myCollection");
var o = collection.Find(i => i.counter == 5).SingleOrDefault();
Console.WriteLine(o.IDTestmodel);
Console.ReadLine();
}
В этом случае программа работает без каких-либо исключений, и я получаю правильное значение ObjectID из документа.
Снова - что я делаю неправильнов случае MyClass
?