MongoDB 查询:包含对特定 id 的引用的所有文档

Posted

技术标签:

【中文标题】MongoDB 查询:包含对特定 id 的引用的所有文档【英文标题】:MongoDB query: all documents that contain reference to a specific id 【发布时间】:2022-01-19 23:18:59 【问题描述】:

我正在尝试从旧版 mongo db (v. 2.0.4) 中提取一些数据。我的数据结构如下:

"_id": "1",
 "@graph": "ma:isMemberOf": ["@id": "524224b804743b02a4c23488",
                               "title": "IHum 350",
                               "transcript": "False",
                              "@id": "53cfd59404743bc3c9119adf",
                               "restrictor": "578e89ae04743b7b0816beff",
                               "title": "Spanish 339",
                               "transcript": "False"],
            "ma:title": "Toy title 1",
"_id": "2",
 "@graph": "ma:isMemberOf": ["@id": "524224b804743b02a4c23488",
                               "title": "IHum 350",
                               "transcript": "False"],
            "ma:title": "Toy title 2"

...我想编写一个查询来查找属于特定组的所有文档(匹配@id 字段)。例如,我希望能够搜索 524224b804743b02a4c23488 并接收文档 1 和 2。或者搜索 53cfd59404743bc3c9119adf 并仅接收文档 1。

我已经尝试了几件事,但我不知道如何查询嵌入的对象。

【问题讨论】:

docs.mongodb.com/manual/core/document/#dot-notation 【参考方案1】:
db.collection.find(
  "@graph.ma:isMemberOf.@id": <your query>
)

这里是Mongo playground 供您参考。

【讨论】:

"@graph.ma:isMemberOf.@id": "524224b804743b02a4c23488" 就足够了。不需要 $elemMatch。 $elemMatch 做这件事对我没有用,但是就像@AlexBlex 在上面的评论中写的那样直接查询就可以了。谢谢! @AlexBlex 感谢您的建议,我已经相应地更新了答案。

以上是关于MongoDB 查询:包含对特定 id 的引用的所有文档的主要内容,如果未能解决你的问题,请参考以下文章

添加对不同于 id 的所选列的引用

mongodb关联查询

如何在 Python 中使用 MongoEngine 查询 MongoDB 中的特定文档?

mongodb 关系引用覆盖索引查询

MongoDB - 发布和获取用户特定数据

Mongodb查询引用