mongoose中schema配置项shardKey不起作用,总是提醒让带上片键

问题描述

官方文档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项,对于更新操作就可以不带片键了,不知道我理解的对不对? 但是我反复测试,不带片键去更新总是报上面的错误,不知道有没有好的处理方法?

阅读 2.3k
1 个回答

你这个地方是不是写错了?shardKey: {shardKey: {eArticleId: 1}}应该是shardKey: {eArticleId: 1}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题