You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mongosh中访问DBRef的$id与$ref属性?

在Mongosh中访问DBRef的$id与$ref字段

问题场景

使用MongoDB 6.0.4及Mongosh 1.4.1,通过以下操作插入包含DBRef关联的文档:

// 插入出版社文档
publisher_id = ObjectId()
db.publishers.insert_one({
    '_id': publisher_id,
    'title': 'XXX',
    'website': 'https://xxxxxxx.com',
})

// 插入关联出版社的书籍文档
db.books.insert_one({
    'title': 'Good book',
    'author': 'Someone',
    'publishers': [ 
        {
            '$ref': 'publishers',
            '$id': publisher_id, 
        },
    ], 
})

执行命令获取DBRef对象后:

> var book = db.books.findOne({title:'Good book'})
> var dbRef = book.publishers[0]
> dbRef
DBRef("publishers", ObjectId("..."))

尝试直接访问dbRef.$id和dbRef.$ref时返回空行,但dbRef.collection可正常返回publishers,JSON.stringify(dbRef)也能正确输出包含$ref和$id的完整结构。

解决方案

根据Mongosh版本不同,需使用对应方式访问DBRef的关联信息:

较新版本Mongosh(如1.4.1及以上)

直接通过以下属性访问:

// 获取关联文档的ObjectId
> dbRef.oid
ObjectId("...")

// 获取关联的集合名称
> dbRef.collection
publishers

较旧版本Mongosh

通过toJSON()方法转换后访问对应字段:

// 获取关联文档的ObjectId
> dbRef.toJSON().$id
ObjectId("...")

// 获取关联的集合名称
> dbRef.toJSON().$ref
publishers

内容的提问来源于Stack Exchange,提问作者Marv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:25