CNode

mongoose中skema设计问题

问答
Bbigtotorouk发布于10 年前最后回复10 年前5 回复4356 浏览0 收藏

一些社交app的设计中, 比如我的uer设计是这样的 var UserSchema = new Schema({ name: { type: String}, pass: { type: String }, nicker: { type: String}, //.... posts : [{ type: Schema.Types.ObjectId, ref: 'Post' }], posts_num : { type: Number, default: 0 }, follow : [{ type: Schema.Types.ObjectId, ref: 'User' }], follow_num: { type: Number, default: 0 }, followed : [{ type: Schema.Types.ObjectId, ref: 'User' }], followed_num: { type: Number, default: 0 }, },{ timestamps: true }); 这个双关联关设计, 当写关注一个人接口的时候,涉及到两个user的save操作,我发现变成事务操作了,但是mongodb不支持事物的。 请问,这样的应用场景怎么办? 我的app设计界面要求有(我的发布文章个数,我的关注用户列表,我的被关注列表)。 如果这种设计不行,那边替代的设计如何做。

查看回复

回复 (5)

W
weizainiunai#1·10 年前
引用 bigtotorouk@weizainiunai 这个知识点我在cnnode的源码里没找到。请问你找到了吗

@bigtotorouk 统一放在一个collection里,key可以是关注的人和被关注的人的id,而且也比较灵活,所有关注的类型都可以放在一个Collection里面,比如关注人和关注话题 /** * type * focus_user * focus_topic */

  • type: { type: String },
  • user_id: { type: Schema.ObjectId, ref: 'User' },
  • focus_user: { type: Schema.ObjectId, ref:'User'},
  • focus_topic: { type: Schema.ObjectId, ref:'Topic' },

查询的时候直接复合查询就好,我一般是这么做的,不知道合不合理-。-

I
i5ting#2·10 年前
  • 单个collection是支持事务的
  • 多个collection也支持事务,但非常麻烦,自己看两阶段提交

另外wiretiger引擎有更好的实现

B
bigtotorouk#3·10 年前

哦 我现在去掉了follered字段 保留了follow而已 其实也能满足

W
weizainiunai#4·10 年前

可以参考cnode社区源码吧

B
bigtotorouk#5·10 年前
引用 weizainiunai可以参考cnode社区源码吧

@weizainiunai 这个知识点我在cnnode的源码里没找到。请问你找到了吗

参与回复
登录后即可参与回复。登录