1

我學習MeanJS和我有問題與貓鼬。我有兩個型號:貓鼬 - 當使用填充沒有記錄,否則數組的記錄

這樣

var CategorySchema = new Schema({ 
 
    name: { 
 
     type: String, 
 
     default: '', 
 
     required: 'Please fill Category name', 
 
     trim: true 
 
    }, 
 
    slug: { 
 
     type: String, 
 
     default: '', 
 
     trim: true, 
 
     unique: true 
 
    }, 
 
    created: { 
 
     type: Date, 
 
     default: Date.now 
 
    }, 
 
    user: { 
 
     type: Schema.ObjectId, 
 
     ref: 'User' 
 
    }, 
 
    articles: [{ 
 
     type: Schema.ObjectId, 
 
     ref: 'Article' 
 
    }] 
 
}); 
 

 
var ArticleSchema = new Schema({ 
 
    created: { 
 
     type: Date, 
 
     default: Date.now 
 
    }, 
 
    category: { 
 
     type: Schema.ObjectId, 
 
     ref: 'Category' 
 
    }, 
 
    title: { 
 
     type: String, 
 
     default: '', 
 
     trim: true, 
 
     required: 'Title cannot be blank' 
 
    }, 
 
    slug: { 
 
     type: String, 
 
     default: '', 
 
     trim: true, 
 
     unique: true 
 
    }, 
 
    content: { 
 
     type: String, 
 
     default: '', 
 
     trim: true 
 
    }, 
 
    user: { 
 
     type: Schema.ObjectId, 
 
     ref: 'User' 
 
    } 
 
});

我節省文章:

exports.create = function(req, res) { 
 
    var article = new Article(req.body); 
 
    article.user = req.user; 
 

 
    article.save(function(err) { 
 
     if (err) { 
 
      return res.status(400).send({ 
 
       message: errorHandler.getErrorMessage(err) 
 
      }); 
 
     } else { 
 
      Category.findById(article.category).exec(function(err, category) { 
 
       category.articles.push(article.category); 
 
       category.save(function(err, category) { 
 
        if (err) { 
 
         return res.status(400).send({ 
 
          message: errorHandler.getErrorMessage(err) 
 
         }); 
 
        } else { 
 
         res.json(article); 
 
        } 
 
       }); 
 
      }); 
 

 
     } 
 
    }); 
 
};

,它的保存正常。物體看起來是這樣的:

{ 
 
    "_id" : ObjectId("55b73bf97aa70c2c083655b0"), 
 
    "user" : ObjectId("55b115f35c7a03cc0e59d821"), 
 
    "articles" : [ 
 
     ObjectId("55b73c017aa70c2c083655b2"), 
 
     ObjectId("55b73ee20bab5e8c0c7eadca") 
 
    ], 
 
    "created" : ISODate("2015-07-28T08:23:21.562Z"), 
 
    "slug" : "motocycles", 
 
    "name" : "Motocycles", 
 
    "__v" : 2 
 
}

,甚至當我在數記錄等{{category.articles.length}}它是在類文章適量我甚至可以打印的ObjectID在視圖中。但是,當我加入.populate(「文章」)是這樣的:

exports.list = function(req, res) { 
 
    Category.find().sort('-created').populate('user', 'displayName').populate('articles').exec(function(err, categories) { 
 
     if (err) { 
 
      return res.status(400).send({ 
 
       message: errorHandler.getErrorMessage(err) 
 
      }); 
 
     } else { 
 
      res.jsonp(categories); 
 
     } 
 
    }); 
 
};

長度返回0,的ObjectID在前看不見我不得不文章屬性沒有訪問就好像有在類別中沒有文章。任何想法爲什麼會發生?

附加編輯:

mongoose.model('Article', ArticleSchema); 
 
mongoose.model('Category', CategorySchema);

+0

你能不能張貼線,你聲明基於這些架構的模型對象? – ZeMoon

回答

0

看來這個問題是與創建功能。我已經改變了一些東西,它開始工作:

exports.create = function(req, res) { 
 
    var article = new Article(req.body); 
 
    article.user = req.user; 
 

 
    article.save(function(err, savedArticle) { 
 
    if (err) { 
 
     return res.status(400).send({ 
 
     message: errorHandler.getErrorMessage(err) 
 
     }); 
 
    } else { 
 
     Category.findById(article.category).exec(function (err, category) { 
 
     category.articles.push(savedArticle); 
 
     category.markModified('articles'); 
 

 
     category.save(function (err, category) { 
 
      if (err) { 
 
      return res.status(400).send({ 
 
       message: errorHandler.getErrorMessage(err) 
 
      }); 
 
      } else { 
 
      res.json(savedArticle); 
 
      } 
 
     }); 
 
     }); 
 
    } 
 
    }); 
 
};

我很好奇,爲什麼它,即使Category對象有適當文章的ObjectId的不工作。

0

First, some changes with regard to variables,schema instances and using ObjectId(The mongoose documentation isn't the best). 
 

 
var categorySchema = new mongoose.Schema({ 
 
    name: { 
 
     type: String, 
 
     required: 'Please fill Category name', 
 
     trim: true 
 
    }, 
 
    slug: { 
 
     type: String, 
 
     trim: true, 
 
     unique: true 
 
    }, 
 
    created: { 
 
     type: Date, 
 
     default: Date.now 
 
    }, 
 
    user: { 
 
     type: mongoose.Types.Schema.ObjectId, 
 
     ref: 'User' 
 
    }, 
 
    articles: [{ 
 
     type: mongoose.Types.Schema.ObjectId, 
 
     ref: 'Article' 
 
    }] 
 
}); 
 

 
var articleSchema = new mongoose.Schema({ 
 
    created: { 
 
     type: Date, 
 
     default: Date.now 
 
    }, 
 
    category: { 
 
     type: mongoose.Types.Schema.ObjectId, 
 
     ref: 'Category' 
 
    }, 
 
    title: { 
 
     type: String, 
 
     trim: true, 
 
     required: 'Title cannot be blank' 
 
    }, 
 
    slug: { 
 
     type: String, 
 
     trim: true, 
 
     unique: true 
 
    }, 
 
    content: { 
 
     type: String, 
 
     trim: true 
 
    }, 
 
    user: { 
 
     type: mongoose.Types.Schema.ObjectId, 
 
     ref: 'User' 
 
    } 
 
}); 
 

 
You need to export your models if you are using an MV* pattern with separate files for separate concerns. So... 
 

 
exports.method = mongoose.model('Category',categorySchema); 
 
exports.otherMethod = mongoose.model('Article',articleSchema); 
 

 
. method and .otherMethod are from nodejs. Not sure about express equivalent or what express itself uses. 
 

 
Then just name this file and require it using its path.