考虑 Mongodb 中的一个文档,例如:
{name:"Josh","address":{"street_no":34,"district":"Gurgaon","pincode":"1234xyz"}}
如何通过查询获取字段名称(而不是值)?是否可以?例如,我需要编写一个查询,它将“name”、“address”、“street_no”、“district”和“pincode”作为 Mongodb 文档中的字段返回给我。
获取模式的另一种有趣方法是在其自身中存储文档的元数据:
例如
{
_id:1
field1:'test'
field2:[]
field:3:{}
metaData:{
field1:'string'
field1:'Array'
field3:'Object'
}
}
优点:
您可以在查询中轻松地从文档中排除元数据:
例如db.collection.find({},{metaData:0})
缺点:
有很多重复的数据被插入到数据库中。
PS:仅当您具有修复模式时,这才有用。
您只能检索值和查询值。您需要将数据重组为更像这样:{"key": "street_no", "value": 34}
. 当然,这可能会极大地影响您的索引和您可能想要执行的其他搜索(并且肯定会降低文档结构的可读性)。
除非您有数百个字段和一个非常大的文档,否则我建议您只返回值而不是试图让 MongoDB 只返回字段名称。
如果您确实需要字段名称,可以根据需要将它们存储在一个数组中作为文档的一部分(如果该key/value
建议似乎不符合您的其他要求)。虽然它是双重存储,但这种技术有时对于 MongoDB 是必要的。
$exists
您始终可以使用(文档)检查给定字段的存在。