将Cosmos Mongo数据库迁移到新的Cosmos Mongo数据库之后,我遇到了问题。成功迁移并尝试更新集合中的项目后,出现此错误:
MongoError: query in command must target a single shard key
这是我第一次看到此错误。读取数据没问题,但是更新不再起作用。
例如:
// Update suit
exports.update_suit = function (req, res, next) {
Suit.updateOne({
id: req.params.id,
}, {
$set: req.body
}, function (err, suit) {
if (err) return next(err);
res.send("Suit has been updated");
})
};
这是以上的目的:
let SuitSchema = new Schema({
type: {type: String},
size: {type: String},
shoeSize: {type: String},
id: {type: String, unique: true, required: true},
location: {type: ObjectId},
status: {type: String},
nextService: {type: Date},
lastService: {type: Date},
condition: {type: String},
assignedTo: {type: Object, default: {}},
comment: {type: String},
make: {type: String},
model: {type: String},
suitType: {type:ObjectId},
year:{type: String},
vessel:{type: String},
guestSuit: {type: Boolean, default: false},
decomissioningReason: {type: ObjectId},
checkOutComment: {type: String},
inUseTempComment: {type: String},
}
在这里,我使用了与ObjectID不同的ID。直到迁移之后,这一切都很好。
是否可以禁用分片或其他任何方法来解决此问题?
答案 0 :(得分:0)
根据评论,您使用了Data Migration Tool,该引擎旨在迁移到SQL API帐户。
官方文档说:
数据迁移工具当前不作为源或目标支持Azure Cosmos DB的MongoDB API。如果要在Azure Cosmos DB中的集合中迁移数据或从集合中迁移数据,请参阅如何使用Azure Cosmos DB的MongoDB API将MongoDB数据迁移到Cosmos数据库。您仍然可以使用数据迁移工具将数据从MongoDB导出到Azure Cosmos DB SQL API集合,以与SQL API一起使用。
执行此操作的正确方法是遵循建议的解决方案:https://docs.microsoft.com/azure/dms/tutorial-mongodb-cosmos-db
另一种替代方法是使用mongoimport和mongorestore。