$zip - Amazon DocumentDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

$zip

Amazon DocumentDB 中的$zip运算符允许您将多个数组组合成单个元组数组(键值对)。当您需要通过合并来自不同源或文档中数组的数据来创建新文档或对象时,这很有用。

参数

  • inputs:解析为数组的表达式数组。这些数组将被组合成一个元组数组。

  • useLongestLength:(可选)如果true,则输出数组将具有最长的输入数组的长度,用null值填充较短的数组。如果false,则输出数组的长度将等于最短的输入数组。

  • defaults:(可选)如果相应的输入数组短于最长的输入数组且useLongestLength为,则用于元组的默认值数组。true

示例(MongoDB 外壳)

以下示例演示如何使用$zip运算符将两个数组组合成单个元组数组。

创建示例文档

db.grades.insert([ { "_id": 1, "name": "John", "scores": [90, 85, 92], "classes": ["Math", "English", "Science"] }, { "_id": 2, "name": "Jane", "scores": [88, 91, 90, 85], "classes": ["Math", "English", "Science", "History"] } ])

查询示例

db.grades.aggregate([ { $project: { "name": 1, "scoredClasses": { $zip: { inputs: ["$scores", "$classes"], useLongestLength: true, defaults: [null, null] } } } } ])

输出

[ { "_id": 1, "name": "John", "scoredClasses": [ [90, "Math"], [85, "English"], [92, "Science"], [null, null] ] }, { "_id": 2, "name": "Jane", "scoredClasses": [ [88, "Math"], [91, "English"], [90, "Science"], [85, "History"] ] } ]

代码示例

要查看使用该$zip命令的代码示例,请选择要使用的语言的选项卡:

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const collection = db.collection('grades'); const result = await collection.aggregate([ { $project: { "name": 1, "scoredClasses": { $zip: { inputs: ["$scores", "$classes"], useLongestLength: true, defaults: [null, null] } } } } ]).toArray(); console.log(result); client.close(); } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] collection = db['grades'] result = list(collection.aggregate([ { '$project': { 'name': 1, 'scoredClasses': { '$zip': { 'inputs': ['$scores', '$classes'], 'useLongestLength': True, 'defaults': [None, None] } } } } ])) print(result) client.close() example()