c# - 如何在 mongodb .net 驱动程序中将元素插入数组

标签 c# mongodb mongodb-.net-driver

我的数据如下所示

> 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。我错过了什么?

谢谢,

附言。 Console.WriteLine(....) 没有显示任何看起来它遇到 Uncaught Error 。任何想法?

最佳答案

如果 MatchedCount 为 0,则表示未找到记录。 coll_t 正确吗?您使用的是正确的数据库和集合吗?

尝试更新您的 key 而不是名称。用这个替换你的过滤器:

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

另外,我会在 Person 中初始化您的 Pets 集合,这样当您没有 Pets 时,您的数据库就会知道它是一个空集合。

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

关于c# - 如何在 mongodb .net 驱动程序中将元素插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29474692/

相关文章:

c# - 如何处理 DataGridViewCell 中的 KeyEvents?

mongodb - 如何将生产 meteor js 数据库与开发同步?

python - KeyError : 'pop from an empty set' when connecting to a Mongodb replica set (motor, pymongo, Tornado )

c# - 有没有办法同步使用 MongoDB C# 驱动程序

c# - MongoDB 驱动程序 2.2 的动态类型 - 如何不序列化 _t 类型鉴别器?

c# - 比较两个 List<MyClass> : How to find out difference?

c# - IHttpAsyncHandler 和 IObservable 网络请求

c# - 在 WCF 数据服务中使用枚举

c# - 为什么 C#/VS 没有像 Java/Eclipse 这样的自动构建功能?

mongodb更新添加每个映射结构的值