2015-04-06 2 views
2

У меня есть данные выглядит, как показано нижекак нажать элемент в массиве в драйвере в MongoDB .net

> db.people.findOne({"Name":"Jones"}) 
{ 
     "_id" : ObjectId("551dcbdc360fbd77107f8a37"), 
     "Name" : "Jones", 
     "Age" : 30, 
     "Profession" : "Hacker" 
} 

Классы определяется как

class Person 
{ 
    public ObjectId Id { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public List<string> Colors { get; set; } 
    public List<Pet> Pets { get; set; } 
} 

class Pet 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
} 

И я пытаюсь нажать Pet элемент в домашних Поле

var pet = new Pet 
    { 
    Name = "Boneless", 
    Type = "Gold Fish", 
    }; 

    var result = await coll_t.UpdateOneAsync(Builders<Person>.Filter.Eq("Name", "Jones"), Builders<Person>.Update.Push(x => x.Pets, pet)); 

    Console.WriteLine(string.Format("MatchedCount = {0}; ModifiedCount = {1}; UpsertedId = '{2}';"), result.MatchedCount.ToString(), result.ModifiedCount.ToString(), result.UpsertedId.ToString()); 

Обновление не дает никаких пояснений. Но он не обновлялся. MatchedCount в результате равен 0, а ModifiedCount - тоже 0. Что я пропустил?

спасибо,

PS. Console.WriteLine (....) не показывает ничего похожего на то, что он столкнулся с ошибкой, не прошедшей проверку. Есть идеи?

ответ

3

Если MatchedCount равно 0, значит, запись не найдена. Правильно ли coll_t? Вы работаете против правильной базы данных и коллекции?

Попробуйте обновить свой ключ вместо имени. Заменить фильтр с этим:

Builders<Person>.Filter.Eq("_id", new ObjectId("551dcbdc360fbd77107f8a37")) 

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

public Person() 
{ 
    Pets = new List<Pet>(); 
} 
Смежные вопросы