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

MongoDB finding the document with more fields

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

在这种情况下,返回值应该是第二个文档或只是 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;

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

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

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