2016-03-29 6 views
0

Скажем, у меня есть две коллекции в MongoDb:MongoDb - Данные из внешней таблицы ключей в одном вызове

  1. товары (Int64 И.Д., описание строки, int64 (Sheves FK) homeShelf)
  2. и полки (int64 id, описание строки)

Возможно ли, чтобы я мог получить описание предмета на полке, получая документ документа за один звонок? Предпочтительно через драйвер C#.

Я предполагаю, что ответ отрицательный, но поскольку такие вещи, как Entity Framework, имеют функциональность, я подумал, что попрошу.

+1

Какую версию MongoDB вы используете? 3.2 поддерживает агрегацию '$ lookup'. – BanksySan

ответ

2

Если вы используете MongoDB 3.2+, вы можете использовать оператор $lookup с агрегацией.

Элементы

{ 
    "_id" : NumberLong(1), 
    "description" : "Item Description", 
    "homeShelf" : NumberLong(1000) 
} 

Полки

{ 
    "_id" : NumberLong(1000), 
    "Description" : "Shelf Description" 
} 

Aggregation Запрос

db.Items.aggregate(
    [ 
    { 
     $lookup: { 
      "from" : "Shelves", 
      "localField" : "homeShelf", 
      "foreignField" : "_id", 
      "as" : "Shelves" 
     } 
    } 
    ] 
); 

Результат

{ 
    "_id" : NumberLong(1), 
    "description" : "Item Description", 
    "homeShelf" : NumberLong(1000), 
    "Shelves" : [ 
     { 
      "_id" : NumberLong(1000), 
      "Description" : "Shelf Description" 
     } 
    ] 
} 

Вы можете использовать следующий код в C# Driver. Добавьте соответственные и проектные этапы по мере необходимости:

var items = itemsCollection.Aggregate() 
    .Lookup("Shelves", "homeShelf", "_id", "Shelves").ToList(); 
+0

Спасибо вам большое! – VSO

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