在MongooseJS / NodeJS中调用非现有的属性

如果我有mongoose模式看起来像这样(一个例子):

Meta = new Schema type_id:Number, datahash: String, data: Schema.Types.Mixed 

这很好。 我可以查询Meta.datahash和价值回来等,但如果我查询Meta.OtherProp ,那么我会得到一个错误,因为属性不存在于模型中。

在PHP中,你可以使用神奇的方法(getter / setter)来处理这个问题。

有没有办法在Mongoose(或NodeJS)中做到这一点。 例子非常欢迎:)

BR /淑娜

编辑:可以说,数据是这样一个对象:

 { 56:'somevalue', 77:'Othervalue' } 

现在 – 有什么办法,我可以直接查询到这一点

Meta.data.56

然后得到“一些价值”返回?

还有一种方法来避免我查询的JS错误

Meta.data.90

作为财产不存在?

我没有使用mongoose。 但是这里有一些模式可以用来在同步和asynchronous情况下设置默认值。

 var DATA={ 56:'somevalue', 77:'Othervalue' }; // SYNC: from JS object function getPropOrDefault(prop){ var val = DATA[String(prop)]; var ret = (val !== undefined ? DATA[String(prop)] : 'default'); return ret; }; // ASYNC: from mongoose function getFromMongoose(key,fn){ //or something. idk how u query mongoose process.nextTick(function(){ var val = DATA[String(key)]; if(val === undefined) { fn(new Error('no_property')) } else{ fn(null, val) }; }); }; function getMongoosePropOrDefault(prop, callback){ getFromMongoose(prop, function(err, result){ if(err){ callback(err, 'default'); } else { callback(null, result); }; }); }; (function main(){ console.log('DATA[77]: '+getPropOrDefault(77) ); console.log('DATA[99]: '+getPropOrDefault(99) ); getMongoosePropOrDefault(77, function(err, result){ console.log('mongoose.data.77: '+result); }); getMongoosePropOrDefault(99, function(err, result){ console.log('mongoose.data.99: '+result); }); })(); 

感谢您的答复。

事实certificate,如果我只是为Meta.data设置默认值,那么我可以使用方括号[]而不是点符号来查询数据中的非现有属性:

 Meta.data[88] 

这解决了我的问题,这实际上与js相关,而不是节点或mongoose。 查询子属性时,这当然不起作用:

 Meta.data[88].something 

除非88确实存在。 但是,再次 – 多数民众赞成在JavaScript …