问题描述
官方文档shardKey配置说明:
按照官方文档配置代码如下:(代码有所删减)
new Schema( {
eId: { type: String, default: null },
eArticleId: { type: NumberLong },
title: { type: String },
type: { type: String, default: 'article' },
author: { type: String, default: null },
}, {
shardKey: {shardKey: {eArticleId: 1}}, // 设置片键,我的片键是eArticleId字段
versionKey: false
});
const name = 'article';
let Article = mongoConn.model(name, userSchema, name);
async function updateDoc(){
let doc = await Article.findOneAndUpdate({_id: '5a53e3a98fc5e3000143f500'}, {$set: {level: 1}}).exec()
console.log('doc = ', doc);
}
直接得到报错信息:MongoError: query for sharded findAndModify must have shardkey
。
我知道带上片键就可以更新成功,但是按官方文档的意思,只要配置schema的shardKey项,对于更新操作就可以不带片键了,不知道我理解的对不对? 但是我反复测试,不带片键去更新总是报上面的错误,不知道有没有好的处理方法?
你这个地方是不是写错了?
shardKey: {shardKey: {eArticleId: 1}}
应该是shardKey: {eArticleId: 1}
。