2015-06-19 211 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