【问题标题】:Embedded array schema type not respected on MongooseMongoose 不支持嵌入式数组模式类型
【发布时间】:2017-02-10 00:25:15
【问题描述】:

我已经苦苦挣扎和安静地阅读了一段时间,似乎无法为我的问题找到合乎逻辑的解释。

这是我的模式声明的代码:

var mongoose = require('mongoose');
var Schema = mongoose;
var exports = module.exports = {};

var userSchema = new mongoose.Schema({
    username: String,
    email: String,
    password: String
});

var messageSchema = new mongoose.Schema({
    text: String,
    user: userSchema,
    created_at: {type: Date, default: Date.now}
});

var roomSchema = new mongoose.Schema({
    name: String,
    topic: String,
    users: [userSchema],
    messages: [messageSchema],
    created_at: {type: Date, default: Date.now}
});


var User = mongoose.model("user", userSchema);
var Message = mongoose.model("message", messageSchema);
var Room = mongoose.model("room", roomSchema);
exports.Users = User;
exports.Messages = Message;
exports.Rooms = Room;

然后我只是在创建一些虚拟数据:

var usersArr = [];
var userTemp = new User({
    username: "Spiderman",
    email: "spiderman@chat.com",
    password: "password"
});
userTemp.save(function (err, user) {
    if (err)return console.log(err)
    //console.log(user);
});
usersArr.push(userTemp);

//some more users....

//messagesArr
var messagesArr = [];
var msgTemp = new Message({
    text: "I think Magneto is getting too old",
    user: usersArr[19]
});
msgTemp.save(function (err, msg) {
    if (err)return console.log(err)
    //console.log(msg);
});
messagesArr.push(msgTemp);

//some more msgs......

var roomsArr = [];
var roomTemp = new Room({
    name: "Villains",
    topic: "Discussing newly spotted villains on our streets",
    users: usersArr,
    messages: messagesArr
});
roomTemp.save(function (err, room) {
    if (err)return console.log(err)
   // console.log(room);
});
roomsArr.push(roomTemp);

//some more rooms........

除了我尝试通过 messagesArr

之外,一切都运行良好
var roomTemp = new Room({
        name: "Villains",
        topic: "Discussing newly spotted villains on pur streets",
        users: usersArr,
        messages: messagesArr
    });

然后一切都崩溃了

value.validate(fn, {__noPromise: true}); ^

TypeError: value.validate 不是函数

对我来说,它看起来与我对其他模式所做的非常相似,我无法弄清楚这个模式有什么问题。任何帮助都感激不尽!看来我真的错过了什么:/

【问题讨论】:

    标签: node.js mongoose schema mongoose-schema


    【解决方案1】:
       var roomsArr = []; var roomTemp = new Room();
        roomTemp.name = "Villains";
        roomTemp.topic = "Discussing newly spotted villains on our streets";
        roomTemp.users = usersArr;
        roomTemp.messages.push({msg:messagesArr}); // I did chenages here
    
    roomTemp.save(function (err, room) {
        if (err)return console.log(err)    // console.log(room); }); roomsArr.push(roomTemp);
    
    I have done changes in your roomTemp object and saving it, now its
    should work
    

    【讨论】:

      【解决方案2】:

      这里有最终的工作代码...

      var mongoose = require('mongoose'); var Schema = mongoose.Schema;
      var exports = module.exports = {};
      
      var userSchema = new Schema({
          username: String,
          email: String,
          password: String });
      
      var messageSchema = new Schema({
          text: String,
          //user: userSchema,
          user:Object,
          created_at: {type: Date, default: Date.now} });
      
      var roomSchema = new Schema({
          name: String,
          topic: String,
          users:[userSchema],
          messages:[messageSchema],
          created_at: {type: Date, default: Date.now} });
      
      var User = mongoose.model("user", userSchema); 
      var Message = mongoose.model("message", messageSchema); 
      var Room = mongoose.model("room", roomSchema); 
      exports.Users = User;
      exports.Messages = Message; 
      exports.Rooms = Room;
      
      
      
      
      require("./config/monDB"); 
      require('./SOFmodel'); 
      var mongoose = require("mongoose"); 
      var User = mongoose.model("user");
      var Message = mongoose.model("message"); 
      var Room = mongoose.model("room");
      
      var usersArr = []; 
      var userTemp = new User({
          username: "Spiderman",
          email: "spiderman@chat.com",
          password: "password" });
         userTemp.save(function (err, user) {
          if (err)return console.log(err)
          //console.log(user); }); 
        usersArr.push(userTemp);
      
      console.log(usersArr[0]); //some more users....
      
      //messagesArr 
       var messagesArr = []; 
       var msgTemp = new Message({
          text: "I think Magneto is getting too old",
          user: usersArr[0] });
      
      msgTemp.save(function (err, msg) {
          if (err)return console.log(err)
          //console.log(msg); }); 
      messagesArr.push(msgTemp);
      
      //some more msgs......
      
      console.log(messagesArr); 
      var roomsArr = []; 
      var roomTemp = new Room();
      
          roomTemp.name = "Villains";
          roomTemp.topic = "Discussing newly spotted villains on our streets";
          roomTemp.users = usersArr;
          roomTemp.messages.push({msg:messagesArr});
      
      roomTemp.save(function (err, room) {
          if (err)return console.log(err)    // console.log(room); }); roomsArr.push(roomTemp);
      

      【讨论】:

      • 当 user:userSchema 被注释时确实有效,但是在消息模式中声明用户不是重点吗?我所做的不是将其声明为模式,而是声明一个用户对象。而且我仍然不明白到底是什么问题。声明模式不是更方便吗?
      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 2017-09-24
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2011-09-04
      相关资源
      最近更新 更多