有没有办法获取MongoDB集合中所有字段名?
有没有什么方法可以获取MongoDB中集合的字段(列名)?就像我们在MySQL中可以做到的那样:
SHOW columns FROM table_name
或者有没有办法检查某个特定字段是否存在于集合中。
5 个回答
1
在MongoDB中,每条记录可以包含不同数量的字段,而且字段的名称也可以不同。这就是为什么在Mongo的API中没有类似的命令:在MySQL中,你可以这样做,因为每一行都有相同数量的列和相同的列名。而在MongoDB中,你不能这样假设。你可以做的是检查在获取的文档中某个字段是否存在,方法很简单:
if field_name in doc:
# Do stuff.
这里的field_name
是你想检查是否存在的“列”名称,而doc是当前游标指向的doc
。记住,doc
是一个字典,所以你可以像处理其他字典一样处理它,使用Python的方式。
1
因为每个文档都是独立的,所以没有简单的方法来处理这个问题。不过,如果你想了解自己收藏中的内容,可以使用Variety,具体可以参考这里:
http://blog.mongodb.org/post/21923016898/meet-variety-a-schema-analyzer-for-mongodb
简单来说,它会对你的收藏进行一种叫做“Map Reduce”的处理,帮助你找出里面有哪些字段。
正如@JohnnyHK所说,你可以通过使用 $exists
来检查某个字段是否存在:http://docs.mongodb.org/manual/reference/operator/exists/
2
第一个问题的答案是否定的,因为集合中的每个文档都是独立的;第二个问题的答案是肯定的(可以使用 $exists
):
# Get the count of docs that contain field 'fieldname'
db.coll.find({'fieldname': {'$exists': 1}}).count()