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

标签 node.js mongoose

如果我在 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/

相关文章:

javascript - 让 return 语句等待,直到函数中的其他所有内容都完成

javascript - 如何填充嵌套虚拟?

node.js - "No listeners detected"验证错误 Mongoose 和 Mocha

node.js - 如何将 geoNear 与 mongoose 一起应用并获取两个坐标之间的距离

mongodb - 什么是 Mongoclient,它的目的是什么?

node.js - 如何在 Electron 中传递命令行参数

node.js - 无法使用 npm 安装 ShareJS

javascript - NodeJS JSON.stringify() 瓶颈

mongodb - 图: "message": "ID cannot represent value: 5a72240cf31713598588b70f"

node.js - Mongoose 5.3.8 - 无法使用 MultiLineString 和 $push 提取地理键