您好我想知道是否可以在Mondodb上创建伪属性。这是,目前我有这样的集合用户:
{_id: (_1), name: "user1", secret: "1"}
{_id: (_2), name: "user2", secret: "2"}
当我查询数据库时。我做了类似的事情:
function getuser(objectId) {
db.users.find({_id : objectId}).toArray(function(err, result) {
x = result[0];
x.pseudoField1 = hash(secret);
return x;
});
}
然后我对x
对象做了一些操作,然后返回到数据库,但在我必须过滤不需要的属性之前,我这样做:
y = {}
y._id = x._id
y.name = x.name
y.secret = x.secret
db.users.update({_id: y._id}, y);
我想知道是否有任何方法可以让数据库自动返回一个带有pseudoField1
的对象和我想要的函数,此外,当我用{{1发出更新时}},只有字段x
,_id
和name
会更新。
答案 0 :(得分:0)
如果要计算数据库中的字段,可以使用具有$project阶段的聚合管道。聚合框架提供some simple arithmetic operators来创建从其他字段的值派生的字段,但实现复杂的哈希函数可能在数据库上太复杂了。
你的第二个要求 - 告诉MongoDB在插入时忽略某个字段 - 不可能是开箱即用的。但你可以做的是remove the field from the document before saving it。您还可以使用像Mongoose这样的对象文档包装器,它允许您定义模式并排除某些字段将它们存储在数据库中。