首页 > 解决方案 > MongoDB JSON 验证未通过

问题描述

我用验证器创建了一个非常基本的计数器集合。我还放了一个方法来调用它。在方法中,我有一个 findAndModify 函数来更新序列。当我调用它时,只有当我将其级别更改为 MODERATE 时它才通过验证器。这里有什么问题?

这是我的验证器方案。

db.createCollection('counter', {
   validator: {
     $jsonSchema: {
       bsonType: 'object',
       required: ['sequence_value'],
       properties: {
         sequence_value: {
           bsonType: 'int'
         }
       }
     }
   }
 });

这是自动更新功能。

function getValueForNextSequence(sequenceOfName) {
    var sequenceDoc = db.counter.findAndModify({
        query: { _id: sequenceOfName },
        update: { $inc: { sequence_value: 1 } },
        new: true
    });
    return sequenceDoc.sequence_value;
}

这是我插入的shell命令来调用它。

db.user.insert({
    _id: getValueForNextSequence("user_id"),
    name: "Heggo",
    surname: "Ruffo",
    phone: "5879885858",
    roles: ["Logistic"],
    password: "d1e8a70b5ccab1dc2f56bbf7e99f064a660c08e361a35751b9c483c88943d082"
})

和输出日志...

2020-03-09T13:12:48.559+0300 E QUERY    [js] Error: findAndModifyFailed failed: {
        "ok" : 0,
        "errmsg" : "Document failed validation",
        "code" : 121,
        "codeName" : "DocumentValidationFailure"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DBCollection.prototype.findAndModify@src/mongo/shell/collection.js:736:1
getValueForNextSequence@(shell):2:23
@(shell):1:1

标签: jsonmongodbjsonschemajson-schema-validatormongodb-shell

解决方案


推荐阅读