如果Schema

时间:2016-03-01 14:07:41

标签: node.js mongoose mongoose-schema

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 是一个变量。 当我在模式中添加该键时,它返回值,即工作正常。 否则它不会返回任何值。

1 个答案:

答案 0 :(得分:0)

看起来有像这样的issue被提交给mongoose。这里有回复:

  

我们在无模式数据库中看到的好处是我们的数据模型能够像我们的功能所需的那样快速发展,而不会对性能产生线性影响,并且会在不必要的迁移时降低部署周期。

     

如果您不想在保存之前对数据进行规范化和验证,那么您不需要像Mongoose这样的工具,您可以直接使用驱动程序。

经过一番挖掘,有一种方法可以做到这一点,但你需要一个类型为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答案进行查找。

**** EDIT

忘记链接mixed types

的文档