MongoDB 查找具有更多字段的文档

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

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

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

mongodb mongodb-query sql-like
3个回答
2
投票

您可以使用从

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

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

1
投票

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

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


0
投票

我不是 MongoDb 专家,也不是一个简单的人,我还需要文档 _id 所以我喜欢:

db.collection.aggregate([
   {
      "$project":{
         "arrayofkeyvalue":{
            "$objectToArray":"$$ROOT"
         }
      }
   },
   {
      "$project":{
         "size":{
            "$size":"$arrayofkeyvalue"
         }
      }
   },
   {
      "$sort":{
         "size":-1
      }
   },
   {
      "$limit":1
   }
]);

干杯

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