У меня есть коллекция foo.foo:
db.runCommand( { shardcollection: "foo.foo", key: { id: 1 } } );
Когда я делаю упертку какого-то документа:
$connection->update(
{ id => 42 },
{ '$set' => { id => 42 } }, # using the '$set' modifier
{ upsert => 1, safe => 1 },
);
Я получаю это исключение:
Can't modify shard key's value fieldid for collection: foo.foo
Если я сделаю upsert без модификаторов:
$result = $collection->update(
{ id => $args{doc_id} },
{ id => 42 }, # regular upsert without modifier
{ upsert => 1, safe => 1 },
);
Я получаю эту ошибку:
cannot modify shard key for collection: foo.foo
Но когда я вместо этого осколок:
# 'id' has been changed to '_id'
db.runCommand( { shardcollection: "foo.foo", key: { _id: 1 } } );
Затем, когда я выполняю тот же переход, что и выше, я получаю следующее исключение:
can't upsert something without shard key
Что такое "shard key's value fieldid"
?
Почему я не могу сделать upsert, который устанавливает "id" с модификаторами или без, как показано в первых 2 примерах?
В любом случае вставки работают нормально. Это возражает, которые бросают исключения.