Mongodb创建伪字段?

时间:2015-06-01 13:48:59

标签: javascript node.js mongodb mongoskin

您好我想知道是否可以在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_idname会更新。

1 个答案:

答案 0 :(得分:0)

如果要计算数据库中的字段,可以使用具有$project阶段的聚合管道。聚合框架提供some simple arithmetic operators来创建从其他字段的值派生的字段,但实现复杂的哈希函数可能在数据库上太复杂了。

你的第二个要求 - 告诉MongoDB在插入时忽略某个字段 - 不可能是开箱即用的。但你可以做的是remove the field from the document before saving it。您还可以使用像Mongoose这样的对象文档包装器,它允许您定义模式并排除某些字段将它们存储在数据库中。