2015-03-25 6 views
0

У меня есть две коллекции, торговые центры и магазины. Я хочу сохранить информацию о местоположении (как широту и долготу). Для торговых центров это легко, потому что у них есть только одна информация о местоположении, поэтому я могу определить свойство широты и долготы. Но для магазинов они могут быть либо в торговом центре, либо на улице, и у них есть несколько мест. Я хочу поддерживать связь между магазинами и торговыми центрами, в тех местах, где они находятся в торговом центре. Я хочу сохранить места как отдельную коллекцию (по крайней мере для магазинов), иначе данные будут очень тяжелыми, когда я перечислил магазины. Расположение выбранного магазина будет отображаться (скачано) только при необходимости. Вопрос в том, как должна быть модель данных для сбора мест? Я рассматриваю что-то подобное, но я не считаю, что это лучшая идея. Я считаю, чтобы сохранить Лат данные локальной сети центра в своей коллекции непосредственно для простоты (кстати, я использую простую схему):Модель данных для метеора

ShopLocations = new Mongo.Collection('shoplocations'); 

var shopsLocationsSchema = new SimpleSchema ({ 
    name: { 
     type: String, 
     label: 'Location Name', 
     max: 200 
    }, 

    inMall: { 
     type: Boolean, 
     label: 'Is it in the mall?', 
     optional: true 
    }, 

    mallId: { 
     type: String, 
     label: 'Mall ID', 
     optional: true 
    }, 

    latitude: { 
     type: Number, 
     label: 'Latitude', 
     decimal: true, 
     optional: true  
    }, 

    longitude: { 
     type: Number, 
     label: 'Latitude', 
     decimal: true, 
     optional: true  
    } 
}); 

ShopLocations.attachSchema(shopsLocationsSchema, {replace: true}); 

ответ

1

Я думаю, что у вас есть три коллекции: торговые центры, магазины и расположения.

Торговые центры и магазины могут иметь места, даже если в торговом центре есть только один.

Месторасположение соответствует магазину, торговому центру или магазину в торговом центре.

Я бы смоделировал местоположение просто как storeId, mallId, latitude, longitude, затем воспользуюсь отсутствием storeId, чтобы обозначить, что местоположение принадлежит только торговому центру. Документ местоположения, соответствующий магазину, должен иметь не менее storeId, но будет иметь только mallId, если это место находится внутри торгового центра.

Приятная вещь в MongoDB заключается в том, что вы можете запрашивать наличие или отсутствие ключей, а также их значений. Например:

Найти расположение всех торговых центров:

Locations.find({mallId: {$exists: true}, storeId: {$exists: false}}); 

Найти расположение всех магазинов не в торговых центрах:

Locations.find({mallId: {$exists: false}, storeId: {$exists: true}}); 

Найти расположение всех магазинов в торговых центрах:

Locations.(mallId: {$exists: true}, storeId: {$exists: true}}); 
+0

Спасибо, Мишель! Это то, что я искал! Еще одна вещь, если вы можете помочь: как показать места определенного магазина, которые не находятся в торговых центрах? Что-то вроде этого? –

+0

магазиныNotInMall = Locations.find ({$ существует: {mallId: false, storeId: storeid}}); –

+0

'магазиныNotInMalls = Locations.find ({storeId: myStoreId, mallId: {$ exists: false}});' –