2015-06-19 250 views
1

我是mongodb的新手,请参阅下面的模型。在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; } 

} 

现在数据显示如下。

enter image description here

我尝试添加ProductGroup(这是一个BsonDocument集合)

收集Technology

你能帮

回答

2

更改技术的型号为

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

然后,

​​
+0

谢谢您的宝贵答复来完成。我尝试做这个方法。但是'.FindOneById'没有获得视觉工作室的智能。我正在使用v2.0.1.27 –

+1

@RageshPuthiyedath如果您引用了MongoDB.Driver.dll,请检查http://api.mongodb.org/csharp/1.0/html/bdd981a2-4af3-e84c-a03c-021c371bb1ce.htm 。如果这不起作用,你可以使用VS intellisense检查其他选项。 – CodingDefined

1

@CodingDefined我改变我的代码为每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); 
+0

很高兴它的工作 – CodingDefined

1
  1. 使用泛型类型。因为此代码parent["ProductGroups"]是任何重构的危险场所。
  2. 你的任务可以在一个查询

var productGroup = new ProductGroup { Id = ObjectId.GenerateNewId(), Name = model.Name };
var collection = database.GetCollection<Technology>("Technology");
var update = Builders<Technology>.Update.AddToSet(x => x.ProductGroups, productGroup);
await collection.FindOneAndUpdateAsync(x => x.Id == model._id, update);

+0

谢谢你的宝贵答复。但我无法在C#intellisence中获取此(FindOneAndUpdateAsync)方法 –

+0

如何获取集合? – rnofenko