【问题标题】:Effective use of Array field in Mongo CollectionMongo Collection中Array字段的有效使用
【发布时间】:2015-04-29 19:11:21
【问题描述】:

我们在我们的应用程序中使用 Mongo DB,在我们的集合中我们将数组存储为字段。例如:

{
    "_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 数组上创建索引,因为它们是搜索字段。
但是在数组字段上创建索引会极大地增加索引的大小。
您能否建议一种更好的方法来实现这一点。

【问题讨论】:

  • 这不是一个解决方案,但我想您可能会对当前处于 RC11 状态的 MongoDB 3.0 感兴趣。使用新的存储引擎WiredTiger 可以压缩索引(以 CPU 消耗为代价)。
  • @yaoxing 我正在等待他们的产品发布到现在还没有公布日期,所以如果有帮助的话,需要研究其他解决方案

标签: java arrays mongodb indexing


【解决方案1】:

您可以通过这种方式重组您的收藏。现在您将拥有 3 个集合:

Col1,文档是这样的:

{
   "_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没有join,所以需要在应用层做join。它会带你 3 个 mongo 查询。索引的大小应该更小,但在进行重大更改之前对其进行测试。

【讨论】:

  • 这些并不总是数字,它们也可以是字符串,这就是为什么我将它们用作字符串
  • @viren 明白了。无论如何,我的回答可能会解决您的问题。
猜你喜欢
  • 2021-04-16
  • 2016-02-05
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 2017-04-26
  • 2015-10-30
  • 2017-08-25
  • 1970-01-01
相关资源
最近更新 更多