2015-06-19 2 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 Collection)

сбор в Technology.

Не могли бы вы помочь

ответ

2

Изменить модель техники, как

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

Затем

var productGroup = new BsonDocument().Add("_id", productGroup_id).Add("Name", name); 

var technologies = database.GetCollection("technology"); 
var technology = technologies.FindOneById(ObjectId.Parse(technology_id)); 

technology["productgroups"] = new BsonArray().Add(BsonValue.Create(productGroup)); 

technologies.Save(technology); 
+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

Спасибо за ваш ценный ответ. Но я не могу получить этот метод (FindOneAndUpdateAsync) в C# intellisence –

+0

Как вы получаете сбор? – rnofenko

Смежные вопросы