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#模型。这就是为什么我需要文档包含最多字段的原因。