MongoDB之DBref(关联插入,查询,删除) 实例深入

2023-05-16

http://blog.csdn.net/crazyjixiang/article/details/6668288



suppose I have the following datastructure:

var user = {_id: 'foo', age: 35};
var post = {_id: '...', author: {$ref: user, $id: 'foo'},...};

How can I query all posts which references user[foo]? I tried the following but not work:


db.post.find('author.$id': 'foo')


如图所示,A,B,C三个Collection互相关联。 其中的数字为document的value值。

关于DBref的入门可以看 http://blog.csdn.net/crazyjixiang/article/details/6616678 这篇文章。

我们先建立A collection。

[cpp]  view plain copy print ?
  1. > var a={value:"1"}  
  2. > var b={value:"2"}  
  3. > var c={value:"9"}  
  4. > var d={value:"10"}  
  5. > db.A.save(a)  
  6. > db.A.save(b)        
  7. > db.A.save(c)   
  8. > db.A.save(d)  
  9. > db.A.find()                                                                                                 
  10. "_id" : ObjectId("4e3f33ab6266b5845052c02b"), "value" : "1" }  
  11. "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" }  
  12. "_id" : ObjectId("4e3f33e06266b5845052c02d"), "value" : "9" }  
  13. "_id" : ObjectId("4e3f33e26266b5845052c02e"), "value" : "10" }  

B collection以A collection的  _id为 ObjectId("4e3f33de6266b5845052c02c")作为Apid

所以:

[cpp]  view plain copy print ?
  1. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:3}                        
  2. > db.B.save(Ba)  
  3. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:4}  
  4. > db.B.insert(Ba)                                                              
  5. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:7}  
  6. > db.B.insert(Ba)                                                              
  7. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:8}  
  8. > db.B.insert(Ba)                                                              
  9. > db.B.find()  
  10. "_id" : ObjectId("4e3f3dd96266b5845052c035"), "Apid" : [ { "$ref" : "A""$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 3 }  
  11. "_id" : ObjectId("4e3f3de16266b5845052c036"), "Apid" : [ { "$ref" : "A""$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 4 }  
  12. "_id" : ObjectId("4e3f3dec6266b5845052c037"), "Apid" : [ { "$ref" : "A""$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 7 }  
  13. "_id" : ObjectId("4e3f3df06266b5845052c038"), "Apid" : [ { "$ref" : "A""$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 8 }  

C collection以B collection的  _id为 ObjectId("4e3f3de16266b5845052c036") 作为Apid

[cpp]  view plain copy print ?
  1. > var Ca={Bpid:[new DBRef('B',ObjectId("4e3f3de16266b5845052c036"))],value:5}                        
  2. > db.C.save(Ca)                                                                
  3. > var Ca={Bpid:[new DBRef('B',ObjectId("4e3f3de16266b5845052c036"))],value:6}  
  4. > db.C.save(Ca)                                                                
  5. > db.C.find()  
  6. "_id" : ObjectId("4e3f42f36266b5845052c03d"), "Bpid" : [ { "$ref" : "B""$id" : ObjectId("4e3f3de16266b5845052c036") } ], "value" : 5 }  
  7. "_id" : ObjectId("4e3f42f96266b5845052c03e"), "Bpid" : [ { "$ref" : "B""$id" : ObjectId("4e3f3de16266b5845052c036") } ], "value" : 6 }  


目前为止3个collection 的关系已经建成。

查询


[cpp]  view plain copy print ?
  1. <span style="font-size:16px;">> var a = db.B.findOne({"value":4})                                                       
  2. > a.Apid.forEach(function(ref){printjson(db[ref.$ref].findOne({"_id":ref.$id}));})  
  3. "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" }</span>  

[cpp]  view plain copy print ?
  1. > db.A.findOne({"_id":db.B.findOne().Apid[0].$id})  
  2. "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" }  

其实好好想想引用不是必须的。

MongoDB 权威指南说了这么一句:

In short,the best time to use DBRefs are when you're storing heterogeneous references to documents in different collections.like when you want to take advantage of some additional DBRef-specific functionality in a driver or tool.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB之DBref(关联插入,查询,删除) 实例深入 的相关文章

  • ROG配置ubuntu20.04.5双系统要点

    win11 43 ubuntu20 04 5 1 BIOS设置 开机长按F2进入bios设置 xff0c 修改advanced参数 xff1a boot gt 关闭fast bootsecurity gt 关闭secure boot设置VM
  • 《自己动手写Docker》书摘之一: Linux Namespace

    Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具 xff0c 但是什么是Linux Namespace 它在Docker内是怎么被使用的 xff0
  • app后端设计(1)--api(2014.01.31更新)

    1 Restful设计原则 Restful风格 xff1a RESTfu设计原则 它被Roy Felding提出 xff08 在他的 基于网络的软件架构 论文中第五章 xff09 而REST的核心原则是将你的API拆分为逻辑上的资源 这些资
  • [How To] Remove deleted records from Main Index in Sphinx

    http www sanisoft com blog 2013 06 28 remove deleted records in sphinx The problem You probably landed here searching fo
  • 左右值无限分类实现算法[转]

    http www jcwcn com archiver tid 227253 html 一 引言 产品分类 xff0c 多级的树状结构的论坛 xff0c 邮件列表等许多地方我们都会遇到这样的问题 xff1a 如何存储多级结构的数据 xff1
  • 给xmpphp添加了几个常用的方法

    给xmpphp添加给了以下的常用方法 xff1a registerNewUser 注册一个新用户 addRosterContact 发送添加好友的请求 accept friend request 接受好友请求 deleteRosterCon
  • app后端设计(2)--xmpp的使用(2014.01.14更新)

    在app中有时候是需要添加聊天服务 xff0c 在这里谈谈曾经开发聊天服务的经验 xff1a xff08 1 xff09 聊天服务端选的openfire xff0c 这是一个基于xmpp协议的聊天服务器 xff08 XMPP是一种基于XML
  • Nginx Location配置总结

    http blog sina com cn s blog 97688f8e0100zws5 html 语法规则 xff1a location 61 uri 61 开头表示精确匹配 开头表示uri以某个常规字符串开头 xff0c 理解为匹配
  • Nginx 下配置SSL证书的方法

    http www jb51 net article 24629 htm 默认 Nginx 是没有 ssl 模块的 xff0c 而我的 VPS 默认装的是 Nginx 0 7 63 xff0c 顺带把 Nginx 升级到 0 7 64 并且
  • 使用nginx搭建https服务器

    http www cnblogs com tintin1926 archive 2012 07 12 2587311 html 最近在研究nginx xff0c 整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的 xff0c 防止中
  • Nginx与Lua

    http www cnblogs com xd502djj archive 2012 11 20 2779598 html 今天安装lua试试 xff0c 这个从开始装的 xff0c 发现一篇文字 xff0c 字数虽少 xff0c 但是却讲
  • MYSQL的空间查询

    http blog sina com cn s blog a48af8c001018q1p html 本文将向各位介绍如何使用MySql5 x中的空间数据库 xff0c 并展示一下它高效的性能 xff08 前提是正确使用 xff09 本文适
  • APM飞控使用动捕等外部定位

    本文初次写于2023 03 03 xff0c pixhawk飞控应该是刷写了ArduPilot 4 1以上的版本 机载计算机通过WIFI和vrpn ros client获取动捕系统 xff08 vicon或者nokov xff09 的无人机
  • APNS导致消息丢失和发送效率原因

    http blog csdn net tlq1988 article details 9612237 首先说明一下 xff0c 本文只是介绍一些容易被开发者忽视 xff0c 而导致性能低下问题 并不是介绍如何向苹果设备成功发送一条消息 xf
  • 苹果通知推送服务(APNS)一些关键特性摘要

    http ramosli iteye com blog 1940843 前段时间 xff0c 仔细研究了APNS的文档 xff0c 把一些关键的地方记录了下来 xff0c 弄懂这些对于理解APNS的规则 xff0c 至关重要 1 If AP
  • 陌陌架构分享 – Apple Push Notification Service

    http blog latermoon com p 61 878 先描述下基本概念 xff0c 标准的iPhone应用是没有后台运行的 xff0c 要实现实时推送消息到手机 xff0c 需要借助Apple提供的APNS服务 iPhone会和
  • CentOS安装JAVA

    http hermosa young iteye com blog 1798026 每次都要搜索一下太麻烦了 xff0c 留个底 xff0c 方便以后查询 一般情况下 xff0c 我们都要将linux自带的OPENJDK卸载掉 xff0c
  • openfire推送离线聊天信息的插件

    插件说明 在手机的聊天应用中 xff0c 经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上 xff0c 为了实现这个功能 xff0c 本人就开发了本插件 xff0c 这个openfire 插件是拦截了发给openfire
  • APNs 推送原理及问题

    http bbs csdn net topics 390461996 在 iOS 平台上 xff0c 大部分应用是不允许在后台运行并连接网络的 在应用没有被运行的时候 xff0c 只能通过 Apple Push Notification S
  • app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)

    在app的后端设计中 xff0c 免不了消息的推送 xff0c 短信 xff0c 邮件等服务 xff0c 下面就个人的开发经验谈谈这方面 xff08 1 xff09 最重要的是 xff0c 各种推送一定要放在队列系统中处理 xff0c 不然

随机推荐

  • 解决openfire中发送某些特殊字符会断开xmpp连接的问题

    在openfire中 xff0c 如果发送某些特殊的字符 xff08 例如一些表情符合 xff09 xff0c 会断开xmpp的连接 xff0c 经查 xff0c 是由以下的代码问题引起的 xff1a src java org jiveso
  • ucloud发送短信的php sdk

    在ucloud官方的版本中 xff0c 只有python的sdk可供调用 xff0c 现提供php的sdk发送短信 项目地址 xff1a https github com newjueqi ucloudsms 使用方法 xff1a 1 在c
  • iOS推送:Java服务器端发送表情(绘文字)

    http blog csdn net musou ldns article details 8692520 功能的时候 xff0c 客户要求能够给iphone发送表情图标 xff0c 也就是绘文字 手机环境 xff1a iOS5 iOS6
  • ROS话题queue_size的含义与设置技巧

    ROS1中发布和订阅话题时 xff0c 都需要设置queue size xff0c 参考 xff1a roscpp Overview Publishers and Subscribers ROS Wiki rospy Overview Pu
  • PHP Simple HTML DOM解析器使用入门

    http www cnphp info php simple html dom parser intro html 一直以来使用php解析html文档树都是一个难题 Simple HTML DOM parser 帮我们很好地解决了这个问题
  • app后端设计(4)-- 通讯的安全性

    在app 的后台设计中 xff0c 一个很重要的因素是考虑通讯的安全性 因此 xff0c 我们需要考虑的要点有 xff1a 1 在app 和后台 xff0c 都不能保存任何用户密码的明文 2 在app 和后台通讯的过程中 xff0c 怎么保
  • app后端设计(5)-- 表情的处理

    在app 的应用中 xff0c 文字中夹带表情是个很常见 xff0c 那么 xff0c 在后台处理表情的时间 xff0c 我遇到过下面两个问题 xff1a 1 表情在mysql 的存储 表情的utf8 编码 xff0c 有时是有4 个字节的
  • app后端设计(6)-- LBS

    在LBS的应用中 xff0c 一个基本的需求是查找附近的用户 xff0c 现在有两种做法 xff1a 1 使用mysql的空间数据库 xff0c 具体做法参考 xff1a http blog sina com cn s blog a48af
  • app后端设计--总目录

    做了3年app相关的系统架构 xff0c api设计 xff0c 先后在3个创业公司中工作 xff0c 经历过手机网页端 xff0c android客户端 xff0c iphone客户端 xff0c 现就职于app云后端平台bmob xff
  • app后端设计(7)-- 项目管理

    移动互联网行业是个快速发展的行业 xff0c 需求不断变化 xff0c 产品更新快 基于移动互联网的以上特点 xff0c 在开发产品的过程中 xff0c 我们放弃了传统的瀑布流开发模型 xff0c 引入了精益的理念和scrum 这个敏捷开发
  • app后端设计(8)-- 数据库分表

    当项目上线后 xff0c 随着用户的增长 xff0c 有些数据表的规模会以几何级增长 xff0c 当数据达到一定规模的时候 xff08 例如100万条 xff09 xff0c 查询 xff0c 读取性能就下降得很厉害 xff0c 这时 xf
  • app后端设计(9)-- 动态通知

    在app中 xff0c 例如在通知界面 xff0c 当新通知的时候 xff0c 需要显示有多少条通知 xff0c 用户点击 获取新通知 后 xff0c 就能看到新的通知 那么在app端 xff0c 怎么才能知道有多少条新通知 xff1f 实
  • app后端设计(10)--数据增量更新

    在新浪微博的app中 xff0c 从别的页面进入主页 xff0c 在没有网络的情况下 xff0c 首页中的已经收到的微博还是能显示的 xff0c 这显然是把相关的数据存储在app本地 使用数据的app本地存储 xff0c 能减少网络的流量
  • app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为 xff0c 在小型的创业团队中 xff0c 特别是以应用产品为主 xff0c 在架构后台的时候 xff0c 需要集中精力解决自身业务上的问题 xff0c 不是花时间解决第三方已经解决的问题 xff0c 简单点来说 xff0c 就是
  • 多机器人集群网络通信协议分析

    本文讨论的是多机器人网络通信各层的情况和协议 每个机器人连接一个数据传输通信模块 xff08 以下简称为数传 xff0c 也泛指市面上的图传或图数一体的通信模块 xff09 xff0c 数传之间进行组网来传递信息 根据ISO的划分 xff0
  • Nginx多虚拟主机下泛域名配置

    http www tuicool com articles F3Azuq 近上一个应用 xff0c 让用户可以自定义二级域名 xff0c 所以要配置一个泛域名来解析用户的自定义域名 首先来说说nginx下的泛域名配置 xff0c nginx
  • PHP集成支付宝快速实现充值功能

    http blog lixiphp com php alipay fast chongzhi axzz2wy4huhBm 本文将介绍如何快速通过PHP类库来集成 整合支付宝来实现充值功能 如果你的系统想要扩充积分 账户余额等功能 xff0c
  • 分布式定时任务框架——python定时任务框架APScheduler扩展

    http bbs 7boo org forum php mod 61 viewthread amp tid 61 14546 如果将定时任务部署在一台服务器上 xff0c 那么这个定时任务就是整个系统的单点 xff0c 这台服务器出现故障的
  • yii批量插入的方法

    code style margin 0px padding 0px border 0px font family none span class kwd style margin 0px padding 0px border 0px spa
  • MongoDB之DBref(关联插入,查询,删除) 实例深入

    http blog csdn net crazyjixiang article details 6668288 suppose I have the following datastructure var user 61 id 39 foo