2016-04-30 1 views
1

У меня есть shardkey {thread_id: 1, _id: 1} по коллекции "пост", и я хочу, чтобы объединить 2 следующий кусок:

{ 
    "_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-й чанк содержит все новые данные (строка -> ObjectId()), а второй кусок содержит документы с thread_id «ObjectId()»

Я пробовал эту команду:

reference

db.runCommand({ 
    mergeChunks : 'forum.post', 
    bounds : [{ 
      thread_id : "547dc7c2de2cf22b688b4572", 
      _id : ObjectId("549c519660e24b65118b456c") 
     }, { 
      thread_id : { 
       $type : 127 
      }, 
      _id : { 
       $type : 127 
      } 
     } 
    ] 
}) 

И я получил эту ошибку:

{ 
    "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 Version 2.4.9

ответ

0

Окажись, что команда "mergechunk" была на более поздней версии 2.6.x ++

Я решил свою проблему с помощью этой команды:

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 } });

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