【问题标题】:MongoDB indexing (ensureIndex)MongoDB 索引 (ensureIndex)
【发布时间】:2012-03-28 18:10:46
【问题描述】:

例如,我收集了 foo 这样的文档:

{"tag_cloud":[{"value":"games", "count":10}, {"value":"girls", "count":500}]}
{"tag_cloud":[{"value":"games", "count":5}, {"value":"stack", "count":100}]}
{"tag_cloud":[{"value":"mongodb", "count":1000}, {"value":"thread", "count":15}]}

两种索引有什么区别:

  1. ensureIndex({"tag_cloud"})
  2. ensureIndex({"tag_cloud.value"});确保索引({“tag_cloud.count”})

在请求的上下文中:

db.foo.find({"tag_cloud.value":"games"}).sort({"tag_cloud.count":-1});

谢谢!!!

【问题讨论】:

    标签: mongodb indexing


    【解决方案1】:

    MongoDB 每次查询一次只能使用一个索引,因此您创建两个索引的建议将不起作用。相反,我会创建一个复合索引:

    > db.foo.ensureIndex({"tag_cloud.value": 1, "tag_cloud.count": -1})
    

    此索引既可用于仅过滤到您要考虑的特定元素或元素,然后也可按降序返回:

    > db.foo.find({"tag_cloud.value":"games"}).sort({"tag_cloud.count":-1}).explain()
    {
        "cursor" : "BtreeCursor tag_cloud.value_1_tag_cloud.count_-1",
        "isMultiKey" : true,
        "n" : NumberLong(2),
        "nscannedObjects" : NumberLong(2),
        "nscanned" : NumberLong(2),
        ...
    

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2014-02-09
      • 2011-11-16
      • 2011-10-23
      • 2014-04-17
      • 2012-10-27
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多