как вставить элемент в массив 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 ответ:
Если MatchedCount равен 0, это означает, что запись не найдена. Является ли coll_t правильным? Вы работаете против правильной базы данных и коллекции?
Попробуйте обновить ваш ключ вместо имени. Замените фильтр следующим образом:
Builders<Person>.Filter.Eq("_id", new ObjectId("551dcbdc360fbd77107f8a37"))
Кроме того, я бы инициализировал вашу коллекцию домашних животных лично, чтобы ваша база данных знала, что это пустая коллекция, когда у вас нет домашних животных.
public Person() { Pets = new List<Pet>(); }