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

问题描述 投票:0回答:2

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

    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)

为什么会这样,我该如何填充关注者和关注者?

node.js mongoose populate
2个回答
6
投票

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


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' }]
});
© www.soinside.com 2019 - 2024. All rights reserved.