gpt4 book ai didi

MongoDB:如何计算文档中的键数?

转载 作者:IT老高 更新时间:2023-10-28 13:04:07 25 4
gpt4 key购买 nike

假设一个文档是:

{

a: 1,
b: 1,
c: 2,
....
z: 2
}

如何计算此类文档中的键数?

谢谢

最佳答案

如果通过聚合框架使用 MongoDB 3.6 和更新版本,则很有可能。使用 $objectToArray聚合管道中的 运算符,用于将文档转换为数组。返回数组包含原始文档中每个字段/值对的元素。返回数组中的每个元素都是一个包含两个字段 kv 的文档。

通过 $$ROOT 可以对文档的根目录进行引用。 引用当前在聚合管道阶段处理的顶级文档的系统变量。

获取数组后,您可以利用 $addFields流水线步骤创建一个保存计数的字段,实际计数是使用 $size 导出的 运算符。

所有这些都可以通过嵌套表达式在单个管道中完成,如下所示:

db.collection.aggregate([
{ "$addFields": {
"count": {
"$size": {
"$objectToArray": "$$ROOT"
}
}
} }
])

示例输出

{
"_id" : ObjectId("5a7cd94520a31e44e0e7e282"),
"a" : 1.0,
"b" : 1.0,
"c" : 2.0,
"z" : 2.0,
"count" : 5
}

要排除 _id 字段,您可以使用 $filter 运算符为:

db.collection.aggregate([
{
"$addFields": {
"count": {
"$size": {
"$filter": {
"input": { "$objectToArray": "$$ROOT" },
"as": "el",
"cond": { "$ne": [ "$$el.k", "_id" ] }
}
}
}
}
}
])

或按照 0zkr PM 的建议只需添加 $project开头的管道步骤:

db.collection.aggregate([
{ "$project": { "_id": 0 } },
{ "$addFields": {
"count": {
"$size": {
"$objectToArray": "$$ROOT"
}
}
} }
])

关于MongoDB:如何计算文档中的键数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com