我用验证器创建了一个非常基本的计数器集合。我还放了一个方法来调用它。在方法中,我有一个 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