MongoDB 多对多关系的简单示例

例如文章的标签,一篇文章可能包含多个标签,一个标签也会对应多篇文章

这是一个多对多的映射关系,在sql中我们一般这样设计

Article:
    Id
    Title
    ...
Tag:
    Id
    Name
Relation:
    ArticleId
    TagId

通过表的连接,就可以查询出我们想要的各种数据

那么,如果用MongoDB的思想,该如何设计这种关系呢?

有一个关键点首先要知道:MongoDB中不支持文档的连接操作,所以就不能按照sql的思路来设计

设计示例

下面给出一个简单的思路

设计两个文档,文章 和 标签,每次文章添加新标签的时候,更新文章和标签的对应关系

article
{
    id:"505cad",
    title:"test title",
    tags:["tag1","tag2"]
    ...
}
tag 
{
    tag:""
    article:["article1","article2"]
    size:2
}

查询示例

(1)列出所有Tag

db.article.distinct("tags")

返回数据例如:

[ "tag1", "tag2", "tag3" ]

(2)列出所有文章及其Tag

db.article.find({});

返回数据例如:

{ 
"_id" : ObjectId("5058878"), 
"title" : "test title", 
"tags" : [ "tag1", "tag2" ] 
}
{ "_id" : ObjectId("505879"), 
"title" : "test title2", 
"tags" : [ "tag1", "tag3" ] 
}

(3)列出某Tag下的所有文章

db.article.find({tags:{$in:["tag2"]}});

返回数据例如:

{ 
"_id" : ObjectId("5058878"), 
"title" : "test title", 
"tags" : [ "tag1", "tag2" ] 
}

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iKcamp

微信小程序教学第二章:小程序中级实战教程之预备篇 - 项目结构设计 |基于最新版1.0开发者工具

第二章:小程序中级实战教程之预备篇    项目结构设计 教学视频地址:https://v.qq.com/x/page/q05544lzelw.html ...

23270
来自专栏美丽应用

为安卓Chrome加入自定义手势控制

97630
来自专栏禅林阆苑

小程序开发总结01 - 模块化开发流程规范

H5 的开发涉及开发工具、前端框架、模块管理工具、任务管理工具、UI库、接口调用工具、各种浏览器运行环境等,尽管H5丰富的开发环境给了开发者更加灵活的配置方案,...

22870
来自专栏极乐技术社区

极乐问答No.2 | 微信小程序开发40问

导语 微信小程序开发者和开发需求者必读,内容涵盖小程序开发实战需要注意的40个技术点,供大家参考: ? 问答 Q Q1:为什么脚本内不能使用window等对象 ...

31380
来自专栏前端说吧

CSS-三栏响应式布局(左右固宽,中间自适应)的五种方法

40630
来自专栏云计算教程系列

如何在Apache上部署多个Wordpress站点

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中...

44950
来自专栏君赏技术博客

怎么让APP`iTunes Connect`名字和在设备上显示的名字是一致的

在iTunes Connect和设备上显示的名字是一致的,因为避免混淆。对于WatchKit的app,对于WatchKit应用程序,这意味着在iTunes Co...

30230
来自专栏進无尽的文章

兼容-记录Xcode8.0恢复插件全过程

Xcode 的插件大大丰富了 Xcode 的功能,而且有了 Alcatraz ,插件的管理也非常容易,但是有个非常恼人的问题:一旦升级 Xcode ,插件就失效...

17420
来自专栏SDNLAB

【每日播报】如何升级Mininet的Open vSwitch版本

因为Mininet的方便且易用,以及实验条件及真实设备的不足,它已经被越来越多的SDN学习者使用。但在Mininet使用中,安装使用的内置Open vSwitc...

40450
来自专栏Maroon1105

WordPress之去掉顶部工具栏

用WP搭建自己博客的人都会发现网站上面有一个黑色的工具栏,影响网站美观度,那么怎么去掉顶部工具栏呐?

64300

扫码关注云+社区

领取腾讯云代金券