MongoDB 通过DBRef关联字段进行查询

wUser是文档中的一个DBRef字段,id是wUser对应的文档的id

{'wUser.$id': ObjectId('5c7a7f9c7e57eb78b92ec271')}

### 关于 MongoDB 中指针查询的最佳实践 在处理 MongoDB 的嵌入式引用(即所谓的“手动引用”或“DBRefs”)时,最佳做法是根据应用程序的需求选择合适的方式。对于关联文档的查询操作,可以采用以下几种方式: #### 使用 DBRef 类型 当两个集合之间的关系不是特别紧密时,可以选择使用 `DBRef` 来表示跨集合的关系。这种方式允许存储指向其他文档的信息而不必实际内联整个子文档。 ```javascript { "_id": ObjectId("..."), "author": { "$ref": "authors", "$id": ObjectId("...") } } ``` 然而值得注意的是,在大多数情况下直接保存对象 ID 而不使用完整的 `DBRef` 结构会更高效[^2]。 #### 嵌套结构设计 如果一对多关系中的“一”的部分经常与“多”的一部分一起访问,则应考虑将后者作为前者的一部分进行建模。这减少了需要执行额外查找的情况数量,并提高了性能。 ```json { "_id":ObjectId("..."), "comments":[ {"text":"comment text", "created_at": ISODate()}, ... ] } ``` 但是要注意保持单个 BSON 文档不超过 16MB 大小限制[^4]。 #### 查找并填充引用字段 为了简化开发人员的工作流程,某些 ODM (Object Data Modeling) 库提供了自动加载功能,比如 Mongoose.js 可以很容易地实现这一点: ```javascript const mongoose = require('mongoose'); let userSchema = new Schema({ name: String, posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }] }); // Querying and populating the referenced documents. User.findById(userId).populate('posts').exec(function(err, user){ console.log(user.posts); // Array of post objects instead of just ObjectIds }) ``` 这种模式下虽然方便了编码过程,但在高并发场景可能会带来性能瓶颈,因为每次都需要发起多次数据库请求来获取所有相关记录[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值