如何在MongoDB集合中提取包含指定结构的前N个文档
MongoDB非均质集合嵌套字段查询方法
你需求的本质是筛选出包含指定嵌套字段的文档,直接使用MongoDB内置的$exists操作符即可实现,不需要用通配符匹配字段值。
根据你给出的文档示例存在结构笔误的情况,分两种场景给出实现代码:
场景1:eventMetadata为文档顶级字段(与content平级,示例大概率是书写格式错误)
该场景下直接指定嵌套字段路径判断存在即可,查询会自动过滤掉没有eventMetadata字段、或eventMetadata下没有jobnr字段的文档:
# 构造查询条件 query = {"eventMetadata.jobnr": {"$exists": True}} # 查询前20条符合条件的文档 cur = enrichments_collection.find(query).limit(20)
场景2:eventMetadata是content数组内的元素(与示例书写结构一致)
如果你的content数组中混合存储了字符串和包含eventMetadata的对象,需要筛选content数组中至少有一个元素包含eventMetadata.jobnr字段的文档,使用$elemMatch操作符实现:
query = { "content": { "$elemMatch": { "eventMetadata.jobnr": {"$exists": True} } } } cur = enrichments_collection.find(query).limit(20)
如果你的文档嵌套层级更深,只需要按照「父字段.子字段.孙字段」的格式拼接完整的字段路径即可,$exists对任意深度的嵌套字段都生效,非常适配非均质结构集合的查询场景。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

