2012-06-21 28 views
2

我使用node mongodb native driver将文档插入到mongodb(sic!)中。我的对象是这样的:排除节点中保存的beeing字段mongodb native

var x = { 
    field: 'value', 
    _nonPersistentField: 'Do not save that' 
}; 

我想达到的目的是为了防止所有以下划线开头的字段不被保存。在上面的例子中,'_nonPersistentField'不应该被保存。

有没有一种方法(Object.defineProperty除外),以防止这些字段被保存在节点mongodb本机?

回答

2

预解析器怎么样?而不是使用save从蒙戈的客户端,使用方法:

function save(obj, callback) { 
    var tmp = {}; 
    Object.keys(obj).forEach(function(key) { 
     if (key.substr(0, 1) !== '_') { 
      tmp[ key ] = obj[ key ]; 
     } 
    }); 

    // Now that the object is filtered, use mongodb's client 
    mongodb.save(tmp, callback); 
} 

使用这种方法,你甚至不看对象的创建和诸如此类的东西,而不是:

mongodb.save(obj, function(err, results) { 
}); 

您正在使用:

save(obj, function(err, results) { 
}); 
+0

虽然关于该解决方案,但我想避免创建新的临时对象实例。但我认为,对于映射的性能影响可以忽略不计...... – saintedlama

+1

只是创建一个对象的性能绝对不会是一个瓶颈。这不是那么昂贵:) –

+0

使用这个功能,你甚至不“看到”对象的创建。你只需像'save(obj,function(err,results){});'一样编码 –