有没有办法获取MongoDB集合中所有字段名?

6 投票
5 回答
4699 浏览
提问于 2025-04-17 18:00

有没有什么方法可以获取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()

撰写回答