Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 调用MongooseJS/NodeJS中不存在的属性_Node.js_Mongoose - Fatal编程技术网

Node.js 调用MongooseJS/NodeJS中不存在的属性

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' } 现在-有什么方法可

如果我在mongoose中有这样一个模式(示例):

这一切都很好。我可以查询Meta.datahash并返回值等。但是如果我查询Meta.OtherProp,那么我将得到一个错误,因为该属性在模型中不存在

在PHP中,有一些神奇的方法(getter/setter)可以处理这个问题

在猫鼬(或NodeJS)中有没有办法做到这一点。示例非常受欢迎:)

BR/Sune

编辑: 假设数据是这样一个对象:

{
  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