【问题标题】:Unable to get the value of particular key in mongoose if that key is not present in Schema如果 Schema 中不存在该键,则无法获取 mongoose 中特定键的值
【发布时间】:2016-03-02 03:20:28
【问题描述】:
UserEventsInfo = new mongoose.Schema({
    name: String,
    username: String,
    event_movie:[String],
    event_tour:[String],
    event_restaurant:[String],
    event_lifetimeevents:[String]
},{strict : false});

我能够插入架构中未定义的新键值对

但是当我尝试读取该键的值时。我不能。我正在使用以下代码。

UserEventsDetails.find({username:username},function(err,docs){
  if(!docs.length)
  {
    res.send('datanotavailable');
      }
  else{
    res.send(docs[0][eventname]);
        }
  }); 

这里 eventname 是一个变量。 当我在模式中添加该键时,它会返回值,即工作正常。 否则它不会返回任何值。

【问题讨论】:

  • 您遇到的错误是什么?
  • 我没有得到任何东西 - 它只返回架构中存在的那些键
  • console.log(err) 中的回调函数,可以帮到你...
  • 如果key不存在,则err为null,docs为[]一个空数组
  • console.log(docs[0]["eventname"]);给我未定义

标签: node.js mongoose mongoose-schema


【解决方案1】:

看起来有一个issue 像这样提交给猫鼬。这里有回应:

我们在无架构数据库中看到的好处是,我们的数据模型能够按照我们的功能所需的速度快速发展,而不会对性能产生线性影响,并且由于不必要的迁移而导致部署周期变慢。

如果你不希望你的数据在保存之前被规范化和验证,那么你不需要像猫鼬这样的工具,你可以直接使用驱动程序。

经过一番挖掘,有一种方法可以做到这一点,但您需要有一个类型为 Schema.Types.Mixed 的字段。所以它看起来像这样:

var schema = new Schema({
    mixed: Schema.Types.Mixed,
});

var Thing = mongoose.model('Thing', schema);

var m = new Thing;
m.mixed = { any: { thing: 'i want' } };

m.save(callback);

要找到混合这个 SO question 的答案。

****编辑

忘记链接mixed types的文档

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 2019-06-12
    • 2022-12-17
    • 2022-07-12
    • 1970-01-01
    • 2019-04-23
    • 2014-12-07
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多