Javascript 从保存在节点mongodb native中的Being中排除字段

Javascript 从保存在节点mongodb native中的Being中排除字段,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在将使用的文档插入mongodb(原文如此!)。我的对象如下所示: var x = { field: 'value', _nonPersistentField: 'Do not save that' }; 我想要实现的是,防止所有以下划线为前缀的字段不被保存。在上面的示例中,不应保存“\u nonPersistentField” 有没有办法(Object.defineProperty除外)防止这些字段保存在node mongodb native中?预解析器呢?不要从mongo客户端

我正在将使用的文档插入mongodb(原文如此!)。我的对象如下所示:

var x = {
  field: 'value',
  _nonPersistentField: 'Do not save that'
};
我想要实现的是,防止所有以下划线为前缀的字段不被保存。在上面的示例中,不应保存“\u nonPersistentField”


有没有办法(Object.defineProperty除外)防止这些字段保存在node mongodb native中?

预解析器呢?不要从mongo客户端使用
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 ) {
} );

虽然我对这个解决方案很感兴趣,但我想避免创建新的临时对象实例。但是我认为映射对性能的影响可以忽略……仅仅创建一个对象的性能肯定不会成为瓶颈。它并没有那么昂贵:)而且使用这个函数,您甚至没有“看到”对象的创建。您只需像
save(obj,function(err,results){}那样正常地编写代码