C# 在MongoDB中的嵌套文档中插入新文档

C# 在MongoDB中的嵌套文档中插入新文档,c#,asp.net-mvc,mongodb,mongodb-query,nosql,C#,Asp.net Mvc,Mongodb,Mongodb Query,Nosql,我是MongoDB的初学者。请看下面我的模型 public class Technology { public Technology() { ProductGroups = new List<ProductGroup>(); } [BsonRepresentation(BsonType.ObjectId)] public ObjectId _id { get; set; } public string Name {

我是MongoDB的初学者。请看下面我的模型

public class Technology
{
    public Technology()
    {
        ProductGroups = new List<ProductGroup>();
    }

    [BsonRepresentation(BsonType.ObjectId)]
    public ObjectId _id { get; set; }

    public string Name { get; set; }

    public IEnumerable<ProductGroup> ProductGroups { get; set; }
}

public class ProductGroup
{

    [BsonRepresentation(BsonType.ObjectId)]
    public ObjectId _id { get; set; }

    public string Name { get; set; }

}
公共类技术
{
公共技术()
{
ProductGroups=新列表();
}
[BsonRepresentation(BsonType.ObjectId)]
公共对象id{get;set;}
公共字符串名称{get;set;}
公共IEnumerable产品组{get;set;}
}
公共类产品组
{
[BsonRepresentation(BsonType.ObjectId)]
公共对象id{get;set;}
公共字符串名称{get;set;}
}
现在数据显示如下


我正在尝试将
ProductGroup
(这是一个BsonDocument集合)集合添加到
Technology

将您的技术模式更改为

[BsonElementAttribute("productgroups")]
public IList<ProductGroup> ProductGroups{ get; set; }

@编码定义我根据v2.0.1.27更改代码

请看下面我的代码。非常感谢你的帮助

var productGroup = new BsonDocument()
                      .Add("_id", ObjectId.GenerateNewId())
                      .Add("Name", model.Name);

BsonDocument parent = null;

var _parent = Collection.FindOneByIdAs(typeof(BsonDocument), model._id);

if (_parent != null)
{

   parent = _parent.ToBsonDocument();

   parent["ProductGroups"] = new BsonArray().Add(BsonValue.Create(productGroup));

   Collection.Save(parent);

}
请确保新的子记录未清除现有记录

parent["ProductGroups"] = parent["ProductGroups"].AsBsonArray.Add(productGroup);
  • 尽可能使用泛型类型。因为这段代码
    parent[“ProductGroups”]
    对于任何重构来说都是危险的
  • 您的任务可以在一个查询中完成
  • var-productGroup=new-productGroup{Id=ObjectId.GenerateNewId(),Name=model.Name}
    var collection=database.GetCollection(“技术”)
    var update=Builders.update.AddToSet(x=>x.ProductGroups,productGroup)

    wait collection.FindOneAndUpdateAsync(x=>x.Id==model.\u Id,update)

    谢谢您宝贵的回复。我试着用这种方法。但是“.FindOneById”无法获得visual studio智能。我使用的是v2.0.1。27@RageshPuthiyedath如果引用了MongoDB.Driver.dll,请检查。如果这不起作用,您可以使用VS intellisense检查任何其他选项。感谢您宝贵的回复。但是我无法在C#intellisenceHow's get collection中获得这个(FindOneAndUpdateAsync)方法?
    parent["ProductGroups"] = parent["ProductGroups"].AsBsonArray.Add(productGroup);