Node.js 调用MongooseJS/NodeJS中不存在的属性
如果我在mongoose中有这样一个模式(示例): 这一切都很好。我可以查询Meta.datahash并返回值等。但是如果我查询Meta.OtherProp,那么我将得到一个错误,因为该属性在模型中不存在 在PHP中,有一些神奇的方法(getter/setter)可以处理这个问题 在猫鼬(或NodeJS)中有没有办法做到这一点。示例非常受欢迎:) BR/Sune 编辑: 假设数据是这样一个对象:Node.js 调用MongooseJS/NodeJS中不存在的属性,node.js,mongoose,Node.js,Mongoose,如果我在mongoose中有这样一个模式(示例): 这一切都很好。我可以查询Meta.datahash并返回值等。但是如果我查询Meta.OtherProp,那么我将得到一个错误,因为该属性在模型中不存在 在PHP中,有一些神奇的方法(getter/setter)可以处理这个问题 在猫鼬(或NodeJS)中有没有办法做到这一点。示例非常受欢迎:) BR/Sune 编辑: 假设数据是这样一个对象: { 56:'somevalue', 77:'Othervalue' } 现在-有什么方法可
{
56:'somevalue',
77:'Othervalue'
}
现在-有什么方法可以直接查询到这样的问题吗
元数据.56
然后返回“somevalue”
还有没有办法避免i query的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);
});
})();
谢谢你的回复 事实证明,如果我只是为Meta.data设置了一个默认值,那么我可以使用方括号[]而不是点符号查询数据中不存在的属性:
Meta.data[88]
这就解决了我的问题,实际上它与js的关系比node或mongoose更密切。当然,当查询子属性(如:
Meta.data[88].something
除非88确实存在。但是再一次-这只是javascript…错误是JS错误还是Mongoose错误?如果将
数据
声明为Schema.Types.Mixed
您应该能够查询其中的任何字段,而不必在Schema中声明它。我需要的是[]而不是Mongoose中的点符号和默认值。
Meta.data[88].something