这个问题在这里已有答案:
考虑下面的集合。我们在集合中有许多具有相同模式的数据。我需要的是获得除实际数据之外的所有不同的密钥名称(即Com_stmt_execute,Table_locks_waited)。我尝试使用.distinct()但我不知道什么时候没有参数可以通过。
_id:5ca358c762fbaff4c7fd53c3
Com_stmt_execute:85684007
Table_locks_waited:0
Handler_rollback:1339763
Bytes_sent:57938711178278
Threads_running:6
Innodb_data_reads:559270903
Threads_connected:2561
Open_tables:6691
Host:"172.16.3.111"
Date:"2019-04-02T18:12:47"
Bytes_received:10945552148828
Handler_commit:8909267294
Name:"EmiratesMasterDB"
这可以通过在mongo shell上使用简单的javascript
代码来完成,看看它
var values = db.collection.find();
var keys = [];
values.forEach(function(o) { for (var k in o ) keys.push(k); })
> keys // Check the all possible keys in the collection
[
"_id",
"Com_stmt_execute",
"Table_locks_waited",
"Handler_rollback",
"Bytes_sent",
"Threads_running",
"Innodb_data_reads",
"Threads_connected",
"Open_tables",
"Host",
"Date",
"Bytes_received",
"Handler_commit",
"Name"
]
另一种过滤任何重复键的方法是使用Set
代替简单数组
> var dataset = db.collection.find();
> const keysHolder = new Set();
> dataset.forEach( function (o) {for (key in o ) keysHolder.add(key)})
> for(let item of keysHolder) {print(item)}
_id
Com_stmt_execute
Table_locks_waited
Handler_rollback
Bytes_sent
Threads_running
Innodb_data_reads
Threads_connected
Open_tables
Host
Date
Bytes_received
Handler_commit
Name
希望以上解决方案能帮到你。