Azure Cosmos MongoDB迁移后无法插入/更新

时间:2019-03-26 08:07:13

标签: mongodb azure azure-cosmosdb

将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。直到迁移之后,这一切都很好。

是否可以禁用分片或其他任何方法来解决此问题?

1 个答案:

答案 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。