我有一个相当具体的案例:使用mongoose / mongo和用户对象
我想在一次通话中找到并更新用户。
DB.collection('users').findOneAndUpdate({localId: id} ,{ "$set": { "name": "lla", "usnme": "As"} } ,callback);
请注意,“用户名”拼写错误。然而mongo更新了第一个字段(名称),并没有给出关于第二个字段的任何错误。
如何在不设置多个查询的情况下验证我在$ set中传递的密钥?
答案 0 :(得分:0)
MongoDB在此建议的内容称为schema validation:
在您的特定情况下,您可以运行以下命令以确保任何人都无法添加其他("错误的")字段:
db.runCommand({ "collMod": "users", "validator": {
$jsonSchema: {
additionalProperties: false,
properties: {
"_id": {
bsonType: "objectId"
},
"name": {
bsonType: "string"
},
"username": {
bsonType: "string"
}
}
}
}})
除此之外,我无法想到任何解决方案,因为MongoDB是一个文档数据库,默认情况下是无模式的,因此不会阻止你创建你告诉它创建的字段......