我正在學習貓鼬。目前我做了幾件不錯的事情,但我真的不明白Mongoose如何管理Schema之間的關係。瞭解貓鼬子文檔
所以,容易的事情(我希望):我在做一個經典的運動(由我自己,因爲我無法找到創建2個以上架構一個很好的教程)3層架構:
用戶,郵政,評論。
- 用戶可以創建多個Post;
- 用戶可以創建很多評論;
- 帖子屬於用戶。
- 評論屬於用戶和帖子。
我不認爲這是非常難呃?
目前我可以很好地管理用戶和發佈之間的關係。我的單元測試的回報正是我需要的,此刻我使用mongo-relation,我不知道這是否是一個好主意......
it('Use should create a Post', function(done) {
User.findOne({ email: '[email protected]' }, function(err, user) {
var post = {
title: 'Post title',
message: 'Post message',
comments: []
};
user.posts.create(post, function(err, user, post) {
if (err) return done(err);
user.posts[0].should.equal(post._id);
post.author.should.equal(user._id);
// etc...
done();
});
});
});
現在的問題是創建一個註釋。 我無法創建一個引用帖子和用戶在一起的評論。
我做了類似的工作,但是當我執行remove
時,它僅從帖子中刪除,而不是從用戶刪除。
所以我覺得有一些我很想念,或者我仍然需要學習來加強它。
it('User should add a Comment to a Post', function(done) {
User.findOne({ email: '[email protected]' }, function(err, user) {
if (err) return done(err);
var comment = new Comment({
author: user._id,
message: 'Post comment'
});
Post.findOne({ title: 'Post title'}, function(err, post) {
if (err) return done(err);
post.comments.append(comment, function(err, comment) {
if (err) return done(err);
post.save(function(err) {
if (err) return done(err);
});
comment.author.should.equal(user._id);
post.comments.should.have.length(1);
// etc...
done();
});
});
});
});
正如你所看到的代碼不是很高興看到的,但它在創作方面效果很好。
問題是當我刪除評論。看起來有些事情是錯的。
這裏是Model關係:
// User Schema
var userSchema = new mongoose.Schema({
// [...],
posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }],
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }],
});
// Post Schema
var postSchema = new mongoose.Schema({
author: { type: mongoose.Schema.ObjectId, ref: 'User', refPath: 'posts' },
title: String,
message: String,
comments: [{ type: mongoose.Schema.ObjectId, ref: 'Comment' }]
});
// Comment Schema
var commentSchema = new mongoose.Schema({
author: { type: mongoose.Schema.ObjectId, ref: 'User', refPath: 'comments' },
post: { type: mongoose.Schema.ObjectId, ref: 'Post', refPath: 'comments' },
message: String
});
在你的幫助,我真的很希望瞭解這一切。
這也將是一個很好的教程關於它。
而你如何刪除它? – Vinz243 2014-09-23 14:28:56
Comment.remove(id) – 2014-09-24 08:07:57