2

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

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

如何通过查询获取字段名称(而不是值)?是否可以?例如,我需要编写一个查询,它将“name”、“address”、“street_no”、“district”和“pincode”作为 Mongodb 文档中的字段返回给我。

4

2 回答 2

1

获取模式的另一种有趣方法是在其自身中存储文档的元数据:

例如

{
    _id:1
     field1:'test'
     field2:[]
     field:3:{}
     metaData:{
           field1:'string'
           field1:'Array'
           field3:'Object'

     }

}

优点:

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

例如db.collection.find({},{metaData:0})

缺点:

有很多重复的数据被插入到数据库中。

PS:仅当您具有修复模式时,这才有用。

于 2013-09-16T16:53:53.157 回答
0

您只能检索值和查询值。您需要将数据重组为更像这样:{"key": "street_no", "value": 34}. 当然,这可能会极大地影响您的索引和您可能想要执行的其他搜索(并且肯定会降低文档结构的可读性)。

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

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

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

于 2013-09-16T12:11:25.803 回答