2015-06-01 77 views
0

你好我想知道是否有可能在Mondodb上創建僞屬性。這是,目前我有一個這樣的收藏用戶:Mongodb創建僞字段?

{_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的對象,此外,當我用x發出更新時,只有字段_id,namesecret得到更新。

+0

如何在自定義函數中實現此邏輯,然後僅將該函數用作集合的update/insert/find方法的代理? – Lix

+1

如果你正在使用貓鼬..使用虛擬 – codeofnode

回答

0

當您要計算數據庫中的字段時,可以使用具有$project階段的聚合管道。彙總框架提供some simple arithmetic operators來創建從其他字段的值派生的字段,但實現複雜的散列函數對於數據庫可能過於複雜。

您的第二個要求 - 告訴MongoDB在插入時忽略某個字段 - 不可能開箱即用。但你可以做的是remove the field from the document before saving it。您還可以使用像Mongoose這樣的對象文檔包裝器,它允許您定義模式並排除將它們存儲在數據庫中的某些字段。