如何在MongoDB中筛选含tyre:MRF的字符串化嵌套对象文档?
筛选包含
tyre: MRF的文档ID 针对你这种accessories.data是字符串化JSON对象的情况,有两种实用方法可以筛选出目标文档的ID:
方法一:正则匹配(兼容所有MongoDB版本)
直接通过正则匹配字符串中包含的"tyre":"MRF"子串,同时只返回_id字段:
db.collection.find( { "accessories.data": /"tyre":"MRF"/ }, { _id: 1 } )
这种方法简单直接,不需要解析JSON,适合低版本MongoDB。
方法二:解析JSON字符串(MongoDB 4.4+支持)
如果你的MongoDB版本在4.4及以上,可以先把字符串化的JSON解析成对象,再精准匹配tyre字段的值:
db.collection.find( { $expr: { $eq: [ { $getField: { field: "tyre", input: { $parseJSON: "$accessories.data" } } }, "MRF" ] } }, { _id: 1 } )
这种方法更严谨,能避免正则可能出现的误匹配(比如字符串中其他位置刚好出现相同子串的情况)。
两种方法都会自动排除像_id: '2'这种没有accessories.data字段的文档。
内容的提问来源于stack exchange,提问作者Dejavu
相关产品推荐
相关产品推荐

