我的数据如下所示
> 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.我错过了什么?
感谢,
PS。 Console.WriteLine(....)没有显示它看起来像遇到未捕获的错误。任何的想法?
答案 0 :(得分:3)
如果MatchedCount为0,则表示未找到记录。 coll_t是否正确?你正在反对正确的数据库和集合吗?
尝试更新您的密钥而不是名称。用这个替换你的过滤器:
Builders<Person>.Filter.Eq("_id", new ObjectId("551dcbdc360fbd77107f8a37"))
另外,我会亲自初始化您的Pets系列,所以当您没有宠物时,您的数据库知道它是一个空的集合。
public Person()
{
Pets = new List<Pet>();
}