仅查询Mongodb中的字段名

仅查询Mongodb中的字段名,mongodb,jackson,jsonpath,Mongodb,Jackson,Jsonpath,考虑Mongodb中的一个文档,例如: {name:"Josh","address":{"street_no":34,"district":"Gurgaon","pincode":"1234xyz"}} 如何通过查询获取字段名(而不是值)?可能吗?例如,我需要编写一个查询,返回“姓名”、“地址”、“街道号”、“地区”和“pincode”作为Mongodb文档中的字段。您只能检索值和查询值。您需要对数据进行重组,使其更像这样:{“key”:“street\u no”,“value”:34}。当然

考虑Mongodb中的一个文档,例如:

{name:"Josh","address":{"street_no":34,"district":"Gurgaon","pincode":"1234xyz"}}

如何通过查询获取字段名(而不是值)?可能吗?例如,我需要编写一个查询,返回“姓名”、“地址”、“街道号”、“地区”和“pincode”作为Mongodb文档中的字段。

您只能检索值和查询值。您需要对数据进行重组,使其更像这样:
{“key”:“street\u no”,“value”:34}
。当然,这可能会极大地影响您的索引和您可能想要执行的其他搜索(当然也会降低文档结构的可读性)

除非您有数百个字段和一个非常大的文档,否则我建议您只返回值,而不是试图让MongoDB只返回字段名

如果您确实需要字段名,您可以根据需要将它们存储在一个数组中,作为文档的一部分(如果
键/值
建议似乎不符合您的其他要求)。虽然它是双重存储,但这种技术有时在MongoDB中是必要的


您可以始终使用
$exists
()检查给定字段的存在性。

获取架构的另一个有趣的方法是将文档的元数据存储在其自身中:

e、 g

优点:

您可以在查询时轻松地从文档中排除元数据:

e、 g.
db.collection.find({},{metaData:0})

缺点:

数据库中插入了大量重复数据


注意:只有当您有固定模式时,这才有用。

您只能检索值和查询值。您需要将数据重组为{“key”:“street_no”,“value”:34}`对于您的查询类型,您最好在这里存储一个键值
{
    _id:1
     field1:'test'
     field2:[]
     field:3:{}
     metaData:{
           field1:'string'
           field1:'Array'
           field3:'Object'

     }

}