gpt4 book ai didi

mongodb - 列出所有键的唯一 Mongo DB 值的计数因子

转载 作者:可可西里 更新时间:2023-11-01 09:15:41 24 4
gpt4 key购买 nike

我正在为我一直使用的 MongoDB 准备一个描述性“模式”(quelle horreur)。

我用了优秀的variety.js创建所有键的列表并显示每个键的覆盖范围。但是,在与键对应的值只有一小部分值的情况下,我希望能够将整个集合列为“可用值”。在 R 中,我会将这些视为分类变量的“因素”,即性别:["M", "F"]。

我知道我可以只使用 R + RMongo,查询每个变量,基本上执行与创建直方图相同的过程,但我想知道正确的 Mongo.query()/javascript/Map,Reduce解决这个问题的方法。我知道 db.collection.aggregate() 函数正是为此而设计的。

在问这个之前,我引用了:

但不能完全正确地安排流水线顺序。因此,例如,如果我有这样的文档:

{_id : 1, "key1" : "value1", "key2": "value3"}
{_id : 2, "key1" : "value2", "key2": "value3"}

我想返回如下内容:

{"key1" : ["value1", "value2"]}
{"key2" : ["value3"]}

或者更好,有计数:

{"key1" : ["value1" : 1, "value2" : 1]}
{"key2" : ["value3" : 2]}

我认识到这样做的一个问题是任何具有广泛不同值的值——因此,文本字段或连续变量。理想情况下,如果有超过 x 个不同的可能值,最好截断,比如不超过 20 个唯一值。如果我发现它实际上更多,我会直接查询该变量。

这是不是这样的:

db.collection.aggregate(
{$limit: 20,
$group: {
_id: "$??varname",
count: {$sum: 1}
}})

首先,我如何引用 ??varname?每个键的名称?

我看到这个链接有 95%: Binning and tabulate (unique/count) in Mongo

与...

input data:

{ "_id" : 1, "age" : 22.34, "gender" : "f" }
{ "_id" : 2, "age" : 23.9, "gender" : "f" }
{ "_id" : 3, "age" : 27.4, "gender" : "f" }
{ "_id" : 4, "age" : 26.9, "gender" : "m" }
{ "_id" : 5, "age" : 26, "gender" : "m" }

这个脚本:

db.collection.aggregate(
{$project: {gender:1}},
{$group: {
_id: "$gender",
count: {$sum: 1}
}})

产生:

{"result" : 
[
{"_id" : "m", "count" : 2},
{"_id" : "f", "count" : 3}
],
"ok" : 1
}

但我不明白的是,对于具有潜在大量返回值的未知数量/名称的键,我如何才能做到这一点?此示例知道键名是性别,并且响应集会很小(2 个值)。

最佳答案

如果您已经运行了一个脚本来输出集合中所有键的名称,您可以动态生成聚合框架管道。这意味着要么扩展 variety.js 类型脚本,要么自己编写。

如果传递一个名为“keys”的数组,它有几个非“_id”命名字段(我假设顶级字段并且你不关心数组,嵌入文档),它在 JS 中可能看起来像等)。

keys = ["key1", "key2"];
group = { "$group" : { "_id" : null } } ;
keys.forEach( function(f) {
group["$group"][f+"List"] = { "$addToSet" : "$" + f }; } );
db.collection.aggregate(group);
{
"result" : [
{
"_id" : null,
"key1List" : [
"value2",
"value1"
],
"key2List" : [
"value3"
]
}
],
"ok" : 1
}

关于mongodb - 列出所有键的唯一 Mongo DB 值的计数因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com