MongoDB聚合:$documents

$documents阶段可以根据输入值返回字面意义的文档。

语法

js 复制代码
{ $documents: <表达式> }

$documents接受可解析为对象数组的任何有效表达式,包括:

  • 系统变量,如 $$NOW $$SEARCH_META

  • $let 表达式

  • $lookup 表达式作用域中的变量

没有指向当前文档的表达式(如 $myField$$ROOT)将导致错误。

举例

测试管道阶段

下面例子为管道阶段创建测试和调试数据,无需创建测试集合。

js 复制代码
db.aggregate(
   [
      { $documents: [ { x: 10 }, { x: 2 }, { x: 5 } ] },
      { $bucketAuto: { groupBy: "$x", buckets: 4 } }
   ]
)

聚合表达式不指定集合。它使用$documents阶段中的输入数据作为$bucketAuto阶段的输入。

js 复制代码
[
  { _id: { min: 2, max: 5 }, count: 1 },
  { _id: { min: 5, max: 10 }, count: 1 },
  { _id: { min: 10, max: 10 }, count: 1 }
]

lookup 阶段使用 documents 阶段

使用$documents修改$lookup的输出。

创建locations集合:

js 复制代码
db.locations.insertMany(
   [
      { zip: 94301, name: "Palo Alto" },
      { zip: 10019, name: "New York" }
   ]
 )

使用$documents作为数据源来转换文件。

js 复制代码
db.locations.aggregate(
   [
      { $match: {} },
      { $lookup:
         {
            localField: "zip",
            foreignField: "zip_id",
            as: "city_state",
            pipeline:
              [
                 { $documents:
                    [
                       { zip_id: 94301, name: "Palo Alto, CA" },
                       { zip_id: 10019, name: "New York, NY" }
                    ]
                 }
              ]
         }
      }
   ]
 )

输出将locations集合中的数据与$documents管道阶段中的值相关联。

js 复制代码
[
   {
      _id: ObjectId("618949d60f7bfd5f5689490d"),
      zip: 94301,
      name: 'Palo Alto',
      city_state: [ { zip_id: 94301, name: 'Palo Alto, CA' } ]
   },
   {
      _id: ObjectId("618949d60f7bfd5f5689490e"),
      zip: 10019,
      name: 'New York',
      city_state: [ { zip_id: 10019, name: 'New York, NY' } ]
   }
]
  • zip 字段对应 zip_id 字段

  • as 参数会创建一个新的输出字段

相关推荐
胚芽鞘6818 分钟前
查询依赖冲突工具maven Helper
java·数据库·maven
宇钶宇夕33 分钟前
SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
运维·服务器·数据库·程序人生·自动化
LuckyLay1 小时前
1.1.1数据类型与变量——AI教你学Django
数据库·django·sqlite
泰勒疯狂展开1 小时前
Java研学-MongoDB(三)
java·开发语言·mongodb
汤姆大聪明2 小时前
Redis 持久化机制
数据库·redis·缓存
brevity_souls2 小时前
什么是时序数据库?——原理、特点与应用
数据库·时序数据库
SelectDB2 小时前
Apache Doris 实时更新技术揭秘:为何在 OLAP 领域表现卓越?
数据库·数据分析·apache
kk在加油4 小时前
Redis数据安全性分析
数据库·redis·缓存
DolphinDB4 小时前
更高效的因子研究工具:基于 DolphinDB 的因子评价框架详解
数据库
此乃大忽悠5 小时前
身份认证缺陷
java·数据库·webgoat·身份认证缺陷