求教一个 mongodb 表关联问题~

2018-01-04 12:10:38 +08:00
 lqzhgood

有 A B C 栏目,每个栏目有 1 个视频集合。建了 4 个 collection 如下

Program=[{name:'A',videos:***},{name:'B',videos:***},{name:'C',videos:***}]
A_videos=[{url:xxx},{url:xxx}.......]
B_videos=[{url:xxx},{url:xxx}.......]
C_videos=[{url:xxx},{url:xxx}.......]

A_videos, B_videos, C_videos 都已经存好数据了,可是 Program 这个 collection 搞不定。。
我想把 Program 中每个栏目( A,B,C )中的 videos 都直接关联到相应的 collection 上( A.videos -> A_videos ),怎么写都不对。。。
Google 到的也都是联合查询方法,建表大致都是说把 全部 videos[X].ObjecID 丢到 Program 的 videos 中。
不能直接指定 Program[X].videos 的 key-value 为 collection 么? 求教。。。 搞了一天要疯了 T.T

我写的 Program 参数如下 ( node / mongoose )

const ObjectId = Schema.Types.ObjectId;


const ProgramSchema = new mongoose.Schema({
	name: String,
	videos: { type: ObjectId, ref: null }
})
const Program = mongoose.model('Programs', ProgramSchema)
cont PRO_LIST = [
	{ name: 'A', vName: 'A_videos' },
	{ name: 'B', vName: 'B_videos' },
	{ name: 'C', vName: 'C_videos' },
]

ProList.forEach((v) => {
	v.vName = {
		type: ObjectId,
		ref: v.vName
	}
	Program.update({ name: v.name }, v, { upsert: true }, (err, res) => {
		if (err) {
			console.log('err', err)
		} else {
			console.log('ok', res)
		}
	})
})


1188 次点击
所在节点    数据库
7 条回复
jakehu
2018-01-04 14:05:21 +08:00
为什么不用 MYsql 我们公司之前用的 mongodb 现在都开始转 mysql
lovescar
2018-01-04 14:13:53 +08:00
mongoose 的文档里有关于外键的说明,你定义了嘛
lzszone
2018-01-04 14:49:57 +08:00
没太看明白...
如果你的想法是...视频 ABC 分别用 collection 存的话....没必要..mongodb 也的确没这个功能(也可能是我不知到)...
mongodb 官网教程里面有关于数据库设计的章节
我觉得你的情况可以直接将 abc_videos 里面的数据嵌套到 program 里面
```javascript
const programSchema = new Schema({
//...
videos:[
{//..., url: String}
]
})
```
也可以所有视频放一个 collection 用 objectid 关联;
如果我没理解错你的意思的话
为什么 abc 三个类型的视频会用三张表来保存?
lzszone
2018-01-04 14:51:03 +08:00
完了...该用啥来写代码段?
yanzixuan
2018-01-04 14:56:28 +08:00
@jakehu 你没看到 LZ 贴的代码么?现在写前端的要把后端的活也给干了。
lqzhgood
2018-01-04 15:33:39 +08:00
@lzszone
之前搞前端的,数据库设计确实不太懂。
因为 ABC 这几组视频之间没有关联,且目前看来只会用到 时间 排序然后分页,存一起到时候查还要多一步筛选 ABC 类型。想着分开存性能可能会比较好。而且也就 ABC 三组,不会再多了。

[也可以所有视频放一个 collection 用 objectid 关联; ]
这个意思是 Program[A].videos 中放 A_videos 中所有 objectid 的意思么?
更新一个视频到 A_videos,然后把这一条数据的 ObjectId push 到 Program[A].videos 中是吧?

P.S 评论不支持 MD 语法。


@yanzixuan 从帝都回到十八线小城市,这里都没有前端这一说,只要 [技术] ,纯前端没饭吃啊
这边技术模式还在 CMS 写模板的阶段,前后端都没分离,算是转行把。 无奈脸 :(
lzszone
2018-01-04 20:01:13 +08:00
@lqzhgood 如果确实不会再多,你这样做也没问题...

既然会分页那, 直接分开查询吧那 我没啥好办法
aggregate->$lookup 应该是不行的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/419959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX