首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb合并块与切分集群上的$maxkey值

Mongodb合并块与切分集群上的$maxkey值
EN

Stack Overflow用户
提问于 2016-04-30 17:52:15
回答 1查看 457关注 0票数 1

我有shardkey {thread_id:1,_id:1} on集合"post",我想合并以下两个块:

代码语言:javascript
复制
{
    "_id" : "forum.post-thread_id_\"547dc7c2de2cf22b688b4572\"_id_ObjectId('549c519660e24b65118b456c')",
    "lastmod" : Timestamp(3012, 3),
    "lastmodEpoch" : ObjectId("50829c0e172de38a3398f72c"),
    "ns" : "forum.post",
    "min" : {
        "thread_id" : "547dc7c2de2cf22b688b4572",
        "_id" : ObjectId("549c519660e24b65118b456c")
    },
    "max" : {
        "thread_id" : ObjectId("50901d4e1dd7198161000063"),
        "_id" : ObjectId("50901d4e1dd7198161000068")
    },
    "shard" : "shard3"
}
{
    "_id" : "forum.post-thread_id_ObjectId('50901d4e1dd7198161000063')_id_ObjectId('50901d4e1dd7198161000068')",
    "lastmod" : Timestamp(604, 0),
    "lastmodEpoch" : ObjectId("50829c0e172de38a3398f72c"),
    "ns" : "forum.post",
    "min" : {
        "thread_id" : ObjectId("50901d4e1dd7198161000063"),
        "_id" : ObjectId("50901d4e1dd7198161000068")
    },
    "max" : {
        "thread_id" : {
            "$maxKey" : 1
        },
        "_id" : {
            "$maxKey" : 1
        }
    },
    "shard" : "shard3"
}

它需要合并,因为thread_id应该是字符串,当前条件第1块保存所有新数据(string -> ObjectId()),第二个块只保存thread_id "ObjectId()“的文档。

我试过这样的命令:

参考文献

代码语言:javascript
复制
db.runCommand({
    mergeChunks : 'forum.post',
    bounds : [{
            thread_id : "547dc7c2de2cf22b688b4572",
            _id : ObjectId("549c519660e24b65118b456c")
        }, {
            thread_id : {
                $type : 127
            },
            _id : {
                $type : 127
            }
        }
    ]
})

我得到了一个错误:

代码语言:javascript
复制
{
    "ok" : 0,
    "errmsg" : "shard key bounds [{
          thread_id: " 547dc7c2de2cf22b688b4572 ", 
          _id: ObjectId(" 549c519660e24b65118b456c ") 
    },{ 
          thread_id: { $type: 127 }, _id: { $type: 127 } })
          are not valid for shard key pattern { thread_id: 1.0, _id: 1.0 }"
}

有人知道怎么解决这个问题吗?

Mongodb版本2.4.9

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 09:25:10

看来"mergechunk“命令出现在后来版本2.6.x ++上。

我使用以下命令解决了我的问题:

代码语言:javascript
复制
db.runCommand({
    mergeChunks : 'forum.post',
    bounds : [{
            thread_id : "547dc7c2de2cf22b688b4572",
            _id : ObjectId("549c519660e24b65118b456c")
        }, {
            thread_id : MaxKey,
            _id : MaxKey
        }
    ]
})

看来,对于“写”,我们应该使用:

db.foo.insert({ id : MaxKey });

对于“查询”,我们应该使用:

db.foo.find({ id : { $type : 127 } });

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36958250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档