2013-10-04 3 views
1

Я получаю решение проблемы с моей проблемой. Я google, но результатов не вижу. Я хотел добавить существующую коллекцию в качестве поля в другую коллекцию. У меня две коллекции: products и product_update. Оба набора имеют как поле ean. Итак, я хотел добавить коллекцию product_update в качестве поля для products, которым они имеют одинаковые ean. Вот мой код:C# Mongodb Добавить поле

var collection1 = Database.GetCollection<Entity>("products"); 
var collection2 = Database.GetCollection<Update>("product_update"); 
var productupdate = collection2.FindAll(); 
foreach (var a in productupdate) 
{ 
    try 
    { 
     var b = collection1.FindOne(Query.EQ("product.ean",a.ean)); 

     BsonDocument product_update = new BsonDocument{ 
      {"ean",a.ean}, 
      {"categody",a.category}, 
      {"list_price_excl_tax",a.list_price_excl_tax}, 
      {"list_price_incl_tax",a.list_price_incl_tax}, 
      {"cost_price",a.cost_price}, 
      {"stock",a.stock}, 
      {"weight",a.weight}, 
      {"currency",a.currency}, 
      {"price_type",a.price_type} 
     }; 
     //then I wanted to insert this product_update to variable b/query 
    } 
    catch (Exception ex) { } 
} 
+0

Я не понимаю, что вы подразумеваете под 'insert this product_update для переменной b/query'. Не могли бы вы уточнить? Вы просто хотите прикрепить 'BsonDocument' к' collection1'? – paqogomez

+0

Да, вот что я имею в виду. –

+1

Не ответ, но если вы использовали сильно типизированные «UpdateBuilder» и «QueryBuilder», это было бы намного проще в обслуживании. –

ответ

0

Добавить поле в вашу организацию, чтобы держать обновление:

public List<Update> Updates {get; set;} 

Затем используйте оператор MongoDB $push, чтобы добавить обновление этой области. См. documentation on $push для получения дополнительной информации.

УКАЗАНИЕ, что если вы это сделаете И вы также сохраните обновление в коллекции обновлений, которое вы храните копии своих данных, и не можете просто изменить обновление после его добавления. Вы можете захотеть вместо этого либо объединить две коллекции вручную во время запроса (т. Е. Получить Entity, а затем извлечь все обновления для него). Или вы можете просто полностью удалить коллекцию Update и сохранить их только внутри Entities.

Основываясь на том, что вы показали до сих пор, похоже, что удаление коллекции для обновлений и просто вложение их в сложные объекты внутри Entity - это правильный путь, поскольку обновление не может быть автономным.

НО, если вы ожидаете очень большого количества обновлений, вы не сможете этого сделать, так как вы превысите максимальный размер документа, чтобы вернуться к их сохранению отдельно.

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