本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
$covarianceSamp
8.0.2 版的新功能。
Amazon DocumentDB 中的$covarianceSamp運算子會傳回兩個數值表達式的範例共變數。它是僅在$setWindowFields階段中使用的視窗運算子;它在 $group或 $bucket階段中無效。您可以在階段的 output 欄位下指定運算子,並選擇性地使用window文件定義視窗邊界。
參數
範例 (MongoDB Shell)
下列範例會依 分割文件series、依 排序每個分割區t,並計算y整個分割區上 x和 的範例共變數。
建立範例文件
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: {
$covarianceSamp: [ "$x", "$y" ],
window: { documents: ["unbounded", "unbounded"] }
}
}
}
}
]);
輸出
[
{ "_id": 1, "series": "A", "t": 1, "x": 1, "y": 2, "covariance": 3 },
{ "_id": 2, "series": "A", "t": 2, "x": 2, "y": 5, "covariance": 3 },
{ "_id": 3, "series": "A", "t": 3, "x": 3, "y": 8, "covariance": 3 },
{ "_id": 4, "series": "B", "t": 1, "x": 1, "y": 8, "covariance": -3 },
{ "_id": 5, "series": "B", "t": 2, "x": 2, "y": 5, "covariance": -3 },
{ "_id": 6, "series": "B", "t": 3, "x": 3, "y": 2, "covariance": -3 }
]
分割區中的每個文件都會收到相同的 covariance、該分割區中y所有文件的 x 和 範例共變數:3序列 A(x 和 y 一起增加) 和序列 -3 B(y 隨 x 增加而減少)。範例共變數除以 n - 1而非 n,因此其大小大於相同資料的母體共變數。
程式碼範例
若要檢視在$setWindowFields階段中使用 $covarianceSamp 運算子的程式碼範例,請選擇您要使用之語言的標籤:
- 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: {
$covarianceSamp: [ "$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': {
'$covarianceSamp': [ '$x', '$y' ],
'window': { 'documents': ['unbounded', 'unbounded'] }
}
}
}
}
]))
print(result)
finally:
client.close()
example()