如何从mongodb / pymongo获取不同的密钥[复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

考虑下面的集合。我们在集合中有许多具有相同模式的数据。我需要的是获得除实际数据之外的所有不同的密钥名称(即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"
mongodb pymongo
1个回答
0
投票

这可以通过在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

希望以上解决方案能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.