您可以使用从
$objectToArray
版本开始的具有 3.4.4
阶段的聚合管道,将所有顶部键和值对转换为文档数组,然后使用 $group
来查找键上带有 $max
的 $size
。
db.collection.aggregate([{
$project: {
arrayofkeyvalue: {
$objectToArray: "$$ROOT"
}
}
}, {
$group: {
_id: null,
max: {
$max: {
$size: "$arrayofkeyvalue.k"
}
}
}
}])
恐怕 mongo 中没有直接的方法来查找文档中的键的数量。
这是你可以做的 -
PRIMARY> var count = 0;
PRIMARY> var temp = 0;
PRIMARY> db.sample.find().forEach( function(d) { for(f in d) { temp++; }if(temp>count){count=temp;temp=0} });
PRIMARY> count;
我建议在每个文档中保留一个包含键数量的计数字段并使用它。每当向现有文档添加新键时更新它,您可以在该字段上建立索引以进行搜索。
我不是 MongoDb 专家,也不是一个简单的人,我还需要文档 _id 所以我喜欢:
db.collection.aggregate([
{
"$project":{
"arrayofkeyvalue":{
"$objectToArray":"$$ROOT"
}
}
},
{
"$project":{
"size":{
"$size":"$arrayofkeyvalue"
}
}
},
{
"$sort":{
"size":-1
}
},
{
"$limit":1
}
]);
干杯