如果我在 Mongoose 中有一个像这样的模式(示例):
Meta = new Schema
type_id:Number,
datahash: String,
data: Schema.Types.Mixed
这一切都很好。我可以查询 Meta.datahash 并取回值等。但是如果我查询 Meta.OtherProp,那么我会收到错误,因为该属性不存在于型号。
在 PHP 中,你有可以处理这个问题的神奇方法(getters/setters)。
有没有办法在 Mongoose(或 NodeJS)中做到这一点。非常欢迎提供示例:)
BR/苏恩
编辑: 可以说数据是这样的对象:
{
56:'somevalue',
77:'Othervalue'
}
现在 - 有什么方法可以让我直接查询这个
Meta.data.56
然后返回“somevalue”?
还有没有办法避免我查询的js错误
元数据.90
因为该属性不存在?
最佳答案
我没用过 Mongoose 。但这里有一些模式,您可以使用它们在同步和异步情况下设置默认值。
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);
});
})();
关于node.js - 在 MongooseJS/NodeJS 中调用不存在的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749520/