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