MissingSchemaError:填充时尚未为模型“用户”注册架构

时间:2013-02-23 10:11:02

标签: node.js mongoose populate

我为创建用户以及关注者和关注者编写模型

    var UserSchema = new Schema({
created_at : { type: Date, default: Date.now }
, name : String
,   hashedPass : String
,   salt: String
,   email : Email
,   avatar : {type: String, default: "images/default_profile.png" }
,   statuses_count : Number
,   screen_name : String
,   location : String
,   about : String
,   followers: [{ type: ObjectId, ref: 'Users' }]
,   following: [{ type: ObjectId, ref: 'Users' }]
,   followers_count : Number
,   following_count : Number
});

并在创建后跟用户我做

UserSchema.statics.createFollowing = function(data, callback) {
    console.log("data: ", data);
    this.findOne({
        name : data.name
    }, function(err, docs) {
        if (err)
            callback("error " + err)
        else if (docs) {
            docs.following.push({"_id" : data.name_follow});                
            docs.save(function(err) {                       
                            if (err)
                                callback(err);
                            console.log("___cxxx_____", this);
                            mongoose.model('User').findOne({
                                    _id : docs._id
                                }).populate('following', 'name screen_name avatar').exec(function(err, docs) {
                                    if (err)
                                        callback(err);
                                    console.log('The creator is %s', docs.following)
                                    callback(docs);
                                });
                        }); 
        }
    });
}

当我请求时喜欢这个

http://localhost:3000/auth/createfollowing?callback=jQuery16104670869295950979_1361607659796&{"name":"testuser1","name_follow":"envatowebdev","token":"ece20af054339bb52d4feee9a05ab8cc401f8dec6b622b8df1e4c0d1789825bee8dd47f572cdc737a098a5be03044596","device":"xphone"}&_=1361607667778

我这样回来

    Mongoose: users.findOne({ _id: ObjectId("5128781fcb8c95909c00000e") }) { fields: undefined, safe: undefined }  

/data/workspace/node/serverjs/node_modules/mongoose/lib/utils.js:397
        throw err;
              ^
MissingSchemaError: Schema hasn't been registered for model "Users".
Use mongoose.model(name, schema)
    at NativeConnection.Connection.model (/data/workspace/node/serverjs/node_modules/mongoose/lib/connection.js:597:11)
    at model.populate [as _populate] (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:150:23)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:269:14)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:232:57)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:232:57)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:232:57)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:232:57)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:232:57)
    at next (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:232:57)
    at init (/data/workspace/node/serverjs/node_modules/mongoose/lib/model.js:215:12)

我不知道为什么会这样,以及如何填充以下和关注者。 提前谢谢

2 个答案:

答案 0 :(得分:6)

问题是这里模型是用户,但我分配了用户 关注者:[{type:ObjectId,ref:'用户'}]

答案 1 :(得分:1)

对于那些使用MEAN.js的人来说,@ sepdau是正确的,但你必须再添加一件东西。例如,如果要创建一个具有Unicorns数组的字段的模型,这将是正确的语法:

var StackOverflowSchema = new Schema({
    title: {
        type: String,
        default: 'StackOverflow',
        trim: true,
        required: 'Name cannot be blank'
    },
    unicorns: [{ type: Schema.ObjectId, ref: 'Unicorn' }]
});