как вставить элемент в массив in in 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 в поле Pets

  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. Что я пропустил?

Спасибо,

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

1 2

1 ответ:

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

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

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

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

public Person()
{
    Pets = new List<Pet>();
}