Я хочу перенести БД из набора реплик в другой, принадлежащий сегментированному кластеру. До сих пор этот кластер имеет только 1 осколок, и на самом деле ни одна коллекция или база данных не сегментированы.
Я монтировал и восстановил эту БД. Из одного из монго сегментированного кластера я могу запустить простой запрос, например find (), но что-то, включая проекцию, подобную следующей, больше не работает:
"find ({" var1 ": subvar}, {" _ id ": 0," fld1 ": 1," fld2 ": 1," fld3 ": 1}). limit (1) .sort (" _ id ", pymongo . УМЕНЬШЕНИЕ) "
Я получаю следующее сообщение об ошибке:
ошибка базы данных: необходимо иметь ключ сортировки в проекции и удалить его
Это должна быть проблема, связанная с сегментированием, потому что я восстановил эту БД на автономном сервере mongodb для разработчиков, и тест прошел успешно.
Заранее спасибо,
Грег.
Это не проблема с mongorestore. Если вы создадите новую коллекцию в сегментированной базе данных в 2.2+, вы увидите такое же поведение.
mongos> db.version()
2.2.6
mongos> db.foo.save({id:3, value:'c'})
mongos> db.foo.save({id:2, value:'b'})
mongos> db.foo.save({id:1, value:'a'})
mongos> db.foo.find({}, {id:0}).sort({id:1})
error: {
"$err" : "have to have sort key in projection and removing it",
"code" : 13431
}
Видимо в 2.0 поведение было другим.
mongos> db.version()
2.0.9
mongos> db.foo.save({id:3, value:'c'})
mongos> db.foo.save({id:2, value:'b'})
mongos> db.foo.save({id:1, value:'a'})
mongos> db.foo.find({},{id:0}).sort({id:1})
{ "_id" : ObjectId("523bd35dff9a7c468936efba"), "value" : "a" }
{ "_id" : ObjectId("523bd358ff9a7c468936efb9"), "value" : "b" }
{ "_id" : ObjectId("523bd352ff9a7c468936efb8"), "value" : "c" }
я открыл СЕРВЕР-10381 чтобы увидеть, ожидается ли это, если вы хотите следовать этому.
РЕДАКТИРОВАТЬ: это ожидается. Когда запрос выполняется через mongos, ожидается, что ключ существует, так что результаты из отдельных сегментов могут быть объединены и отсортированы. До версии 2.2 логика для отдельной коллекции осколков / необработанных данных явно отличалась, но она была изменена для единообразия.
Документация будет обновлена, чтобы отразить его ограничение.