用于在Mongoose Schema中对数据进行分组的正确结构

时间:2014-12-08 17:08:07

标签: node.js mongodb mongoose schema

我创建了一个如下所示的Mongoose Schema:

var UserSchema = new Schema({

  user: [{
    name: { 
      type: String, 
      required: true
    },
    email: { 
      type: String, 
      required: true, 
      index: { unique: true } 
    },
    password: { 
      type: String, 
      required: true 
    },
    mobile: Number
  }],

  account: [{
    locked: {
      type: Boolean,
      default: false
    },
    accountType: {
      type: String,
      default: "guest"
    },
    failedLogins: {
      type: Number,
      default: 0
    }
  }],

  reset: [{
    resetToken: String,
    resetExpirey: Date
  }],

  details: [{
    accountCreated: Date,
    lastLogin: Date
  }]

});

正如您所看到的,我试图对某些字段进行分组。这是正确的方法吗?我现在无法参考这些字段。我尝试这个时出错:

User.create({
    user.name : req.body.name,
    user.email : req.body.email,
    user.password: req.body.password
  }, function(err) {
    if (err) res.send(err);
  });

错误为unexpected token '.' in user.name

1 个答案:

答案 0 :(得分:2)

你的create语句仍然需要正确的javascript,所以你的左侧对象文字需要是字符串。

User.create({
    'user.name' : req.body.name,
    'user.email' : req.body.email,
    'user.password': req.body.password
  }, function(err) {
    if (err) res.send(err);
  });

此外,因为Mongoose要求您拥有一个数组而不是允许正确的子对象,所以您需要将它们实际插入为数组。

var user = {user: [{name:req.body.name, email: req.body.email, password: req.body.password}]};
User.create(user) ...

至于“这样做是否值得”,我的意见是:不。只需将所有这些内容放在根对象中,除非您计划在这一个文档中拥有多个用户或多个帐户。