MongoDB正在查找包含更多字段的文档

MongoDB正在查找包含更多字段的文档,mongodb,mongodb-query,sql-like,Mongodb,Mongodb Query,Sql Like,是否可以从集合中获取字段数最多的文档 在这种情况下,返回的值应该是第二个文档,或者只有18个。恐怕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} });

是否可以从集合中获取字段数最多的文档


在这种情况下,返回的值应该是第二个文档,或者只有18个。

恐怕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;

我建议在每个文档中保留一个包含键数的count字段并使用它。每当向现有文档中添加新的键时,您可以对该字段进行索引以进行搜索。

恐怕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;

我建议在每个文档中保留一个包含键数的count字段并使用它。在现有文档中添加新密钥时更新该密钥,您可以在该字段上建立索引进行搜索。

您可以使用聚合管道和
$objectToArray
阶段,从
3.4.4
版本开始,将所有顶级键和值对转换为文档数组,然后是
$group
,以查找键上有
$size
$max

db.collection.aggregate([{
    $project: {
        arrayofkeyvalue: {
            $objectToArray: "$$ROOT"
        }
    }
}, {
    $group: {
        _id: null,
        max: {
            $max: {
                $size: "$arrayofkeyvalue.k"
            }
        }
    }
}])

3.4.4
版本开始,您可以使用带有
$objectToArray
阶段的聚合管道将所有顶级键和值对转换为文档数组,然后使用
$group
查找键上带有
$size
$max

db.collection.aggregate([{
    $project: {
        arrayofkeyvalue: {
            $objectToArray: "$$ROOT"
        }
    }
}, {
    $group: {
        _id: null,
        max: {
            $max: {
                $size: "$arrayofkeyvalue.k"
            }
        }
    }
}])

我试过你的解决办法。结果是:{“_id”:null,“max”:5}有没有办法获取文档的_id以便我们可以获取字段列表?我试图为每个系列创建一个C#模型。这就是为什么我需要文档包含最多字段的原因。我尝试了您的解决方案。结果是:{“_id”:null,“max”:5}有没有办法获取文档的_id以便我们可以获取字段列表?我试图为每个系列创建一个C#模型。这就是为什么我需要文档包含最多字段的原因。