MongoDB查询问题:如何匹配ContactLists.Values任意节点中的指定GUID
如何查询MongoDB文档中嵌套对象任意位置的特定GUID
你的问题根源在于指定了具体的索引.0.,这就把查询范围限制在了ContactLists.Values下的第一个子对象。要匹配任意位置的目标GUID,只需要去掉索引部分,让MongoDB自动遍历所有子元素即可。
正确的查询语句
db.Contacts.find({ "Tags.Entries.ContactLists.Values.Value": "{360DC2AE-2B67-4E8D-E320-71D0D30D90F7}" })
原理说明
MongoDB的点符号查询支持遍历嵌套对象(包括你这种键为数字的类数组结构)下的所有子文档。当你直接写Values.Value时,MongoDB会检查Values下的每一个子对象——不管键是0、1还是其他数字——只要其中有一个Value字段等于目标GUID,这个文档就会被匹配到。
测试验证
用你提供的样本文档测试这个查询:
- 当GUID在
Values.0.Value时,能正常匹配(和原查询结果一致) - 当GUID在
Values.1.Value或Values.5.Value这类其他位置时,同样能被精准匹配,完美解决你遇到的问题。
内容的提问来源于stack exchange,提问作者SCDev
相关产品推荐
相关产品推荐

