Mongo DB recommends all update() operations for a sharded collection that specify the signle document update only ‘multi:false’ option (which is by default) must include the shard key in the query condition so the query will hit only a specific shard cluster. If no shard key found and ‘multi:false’, it returns this error (See http://docs.mongodb.org/manual/core/sharded-cluster-query-router/)
In version 2.4, the error message is ‘for non-multi updates must have _id or full shard key’