本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
$covariancePop
8.0.2 版中的新内容。
Amazon DocumentDB 中的$covariancePop运算符返回两个数值表达式的总体协方差。它是一个仅在$setWindowFields阶段使用的窗口运算符;它在$group或$bucket阶段无效。您可以在舞台的output字段下指定运算符,也可以选择使用window文档定义窗口边界。
参数
示例(MongoDB Shell)
以下示例按文档分区series,按分区排序t,并计算整个分区的x总体协方差。y
创建示例文档
db.measurements.insertMany([
{ _id: 1, series: "A", t: 1, x: 1, y: 2 },
{ _id: 2, series: "A", t: 2, x: 2, y: 5 },
{ _id: 3, series: "A", t: 3, x: 3, y: 8 },
{ _id: 4, series: "B", t: 1, x: 1, y: 8 },
{ _id: 5, series: "B", t: 2, x: 2, y: 5 },
{ _id: 6, series: "B", t: 3, x: 3, y: 2 }
]);
查询示例
db.measurements.aggregate([
{
$setWindowFields: {
partitionBy: "$series",
sortBy: { t: 1 },
output: {
covariance: {
$covariancePop: [ "$x", "$y" ],
window: { documents: ["unbounded", "unbounded"] }
}
}
}
}
]);
输出
[
{ "_id": 1, "series": "A", "t": 1, "x": 1, "y": 2, "covariance": 2 },
{ "_id": 2, "series": "A", "t": 2, "x": 2, "y": 5, "covariance": 2 },
{ "_id": 3, "series": "A", "t": 3, "x": 3, "y": 8, "covariance": 2 },
{ "_id": 4, "series": "B", "t": 1, "x": 1, "y": 8, "covariance": -2 },
{ "_id": 5, "series": "B", "t": 2, "x": 2, "y": 5, "covariance": -2 },
{ "_id": 6, "series": "B", "t": 3, "x": 3, "y": 2, "covariance": -2 }
]
分区中的每个文档收到的总协方差相同covariance,即该分区中y所有文档的x总体协方差:2对于系列A(x 和 y 一起增加),-2对于系列B(y 随着 x 的增加而减小)。
代码示例
要查看在$setWindowFields阶段中使用$covariancePop运算符的代码示例,请选择要使用的语言的选项卡:
- Node.js
-
const { MongoClient } = require('mongodb');
async function example() {
const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
try {
await client.connect();
const db = client.db('test');
const measurements = db.collection('measurements');
await measurements.insertMany([
{ _id: 1, series: "A", t: 1, x: 1, y: 2 },
{ _id: 2, series: "A", t: 2, x: 2, y: 5 },
{ _id: 3, series: "A", t: 3, x: 3, y: 8 },
{ _id: 4, series: "B", t: 1, x: 1, y: 8 },
{ _id: 5, series: "B", t: 2, x: 2, y: 5 },
{ _id: 6, series: "B", t: 3, x: 3, y: 2 }
]);
const result = await measurements.aggregate([
{
$setWindowFields: {
partitionBy: "$series",
sortBy: { t: 1 },
output: {
covariance: {
$covariancePop: [ "$x", "$y" ],
window: { documents: ["unbounded", "unbounded"] }
}
}
}
}
]).toArray();
console.log(result);
} finally {
await 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')
try:
db = client['test']
measurements = db['measurements']
measurements.insert_many([
{ '_id': 1, 'series': 'A', 't': 1, 'x': 1, 'y': 2 },
{ '_id': 2, 'series': 'A', 't': 2, 'x': 2, 'y': 5 },
{ '_id': 3, 'series': 'A', 't': 3, 'x': 3, 'y': 8 },
{ '_id': 4, 'series': 'B', 't': 1, 'x': 1, 'y': 8 },
{ '_id': 5, 'series': 'B', 't': 2, 'x': 2, 'y': 5 },
{ '_id': 6, 'series': 'B', 't': 3, 'x': 3, 'y': 2 }
])
result = list(measurements.aggregate([
{
'$setWindowFields': {
'partitionBy': '$series',
'sortBy': { 't': 1 },
'output': {
'covariance': {
'$covariancePop': [ '$x', '$y' ],
'window': { 'documents': ['unbounded', 'unbounded'] }
}
}
}
}
]))
print(result)
finally:
client.close()
example()