2015-02-27 4 views
2

Мы используем Mongo DB в нашем приложении, и в нашей коллекции мы сохраняем массив как поле. например:Эффективное использование поля Array в коллекции Mongo

{ 
    "_id" : ObjectId("54ef67573848ec32b156b053"), 
    "articleId" : "46384262", 
    "host" : "example.com", 
    "url" : "http://example.com/articleshow/46384262.cms", 
    "publishTime" : NumberLong("1424954100000"), 
    "tags" : [ 
      "wind power", 
      "mytrah", 
      "make in india", 
      "government", 
      "andhra pradesh" 
    ], 
    "catIds" : [ 
      "2147477890", 
      "13352306", 
      "13358350", 
      "13358361" 
    ] 
} 

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

+0

Это не решение, но я думаю, что, возможно, вам будет интересен MongoDB 3.0, который в настоящее время находится в состоянии 'RC11'. С помощью индекса хранения данных [WiredTiger] (http://docs.mongodb.org/v3.0/release-notes/3.0/#wiredtiger-concurrency-and-compression) индексы могут быть сжаты (с компромиссом потребления ЦП). – yaoxing

+0

@yaoxing Я жду их продюсерского выпуска no Дата объявляется до сих пор, поэтому нужно работать над другими решениями, если это может помочь – viren

ответ

0

Вы можете перестроить свою коллекцию таким образом. Теперь у Вас есть 3 коллекции:

Coll1, документы выглядят следующим образом:

{ 
    "_id" : ObjectId("54ef67573848ec32b156b053"), 
    "articleId" : "46384262", 
    ... your other stuff 
} 

Метки документы выглядеть следующим образом:

{ 
     '_id': 1, 
     'name': 'wind power' 
    } 
    { 
     '_id': 2, 
     'name': 'mytrash' 
    } 
    .... 

и коллекция, которая связывает Coll1 с тегами:

{ 
    "collID" : ObjectId("54ef67573848ec32b156b053"), 
    "tagID": 1 
} 
{ 
    "collID" : ObjectId("54ef67573848ec32b156b053"), 
    "tagID": 2 
} 

У Mongo нет объединений, поэтому вам нужно делать соединения на прикладном уровне. И вам потребуются 3 манго. Размер индексов должен быть меньше, но проверять его перед внесением существенных изменений.

+0

Это не всегда номера, они могут быть строковыми тоже, поэтому я использую их как строку – viren

+0

@ viren получил это , Во всяком случае, у моего ответа есть возможное решение проблемы. –

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