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"
}
}
}
}])
是否可以从集合中获取字段数量最多的文档?
在这种情况下,返回值应该是第二个文档或只是 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"
}
}
}
}])