我是MongoDB的新手,正在尝试寻找一种可以掩盖字段以保护隐私的方法。在MongoDB 3.4中尝试了只读视图
我有以下收藏,
db.employees.find().pretty()
{
"_id" : ObjectId("59802d45d2f4250001ead835"),
"name" : "Nick",
"mobile" : "927 113 4566"
},
{
"_id" : ObjectId("59802d45d2f4250001ead835"),
"name" : "Sam",
"mobile" : "817 133 4566"
}
创建一个只读视图:
db.createView("employeeView", "employees", [ {$project : { "mobile": 1} } ] )
db.employeeView.find()
{ "_id" : ObjectId("59802d45d2f4250001ead835"), "mobile" : "927 113 4566"}
{ "_id" : ObjectId("59802d45d2f4250001ead835"), "mobile" : "817 133 4566"}
但我找不到在employeeView中掩盖“移动”字段的解决方案,但提到我们可以在MongoDB GDPR白皮书中掩盖
https://www.mongodb.com/collateral/gdpr-impact-to-your-data-management-landscape
任何建议做到这一点。
最佳答案
根据您的用例,有几种方法可以“掩盖” mobile
字段值。视图是基于MongoDB Aggregation Pipeline构造的,您可以根据需要使用它。
例如,您可以简单地使用$project隐藏mobile
字段。
即鉴于这些文件:
{"_id": ObjectId(".."), "name": "Nick", "mobile": "927 113 4566"}
{"_id": ObjectId(".."), "name": "Sam", "mobile": "817 133 4566"}
您可以在视图中排除
mobile
字段:> db.createView("empView", "employees", [{"$project":{name:1}}])
> db.empView.find()
{"_id": ObjectId(".."), "name": "Nick"}
{"_id": ObjectId(".."),"name": "Sam"}
或者,也许您在文档中有一个额外的字段来指示信息是否公开,即给定的文档:
{"_id": ObjectId(".."), "name": "Nick", "mobile": "927 113 4566", "show": true}
{"_id": ObjectId(".."), "name": "Sam", "mobile": "817 133 4566", "show": false}
您可以使用$cond表达式基于字段
show
进行屏蔽。例如:> db.createView("empView", "employees",
[{$project:{
name:1,
mobile:{$cond:{
if:{$eq:["$show", false]},
then: "xxx xxx xxxx",
else: "$mobile"}}
}}])
> db.empView.find()
{"_id": ObjectId(".."), "name": "Nick", "mobile": "927 113 4566"}
{"_id": ObjectId(".."), "name": "Sam", "mobile": "xxx xxx xxxx"}
关于java - MongoDB只读 View 字段Masking,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49767763/