大家下午好。
我在MongoDB文档中有一个数组。我不会在其中找到一个Volume
并在Volume
参数上对整个集合取平均值。
MongoDB中的文档:
如您所见,我在数组内部有数组。我将有很多相同类型的文档,并且需要在Volume
参数的每个文档之间进行平均计算。
问题代码区域(仅展示我的尝试,这不起作用。
function simplePipeline(db, callback) {
const collection = db.collection('ADABTC');
collection.aggregate(
[
{ '$group': { 'Volume': { '$avg': 'Array.Volume' } } }
],
function(err, cursor) {
assert.equal(err, null);
cursor.toArray(function(err, documents) {
console.log(documents)
callback(documents);
});
}
);
}
以防万一,例如,我可以连接到数据库username:password
。
如何指定NodeJS?
NodeJS完整代码
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://username:password@ip.adress.port/<dbname>?retryWrites=true&w=majority';
// Database Name
const dbName = 'Crypto';
// Create a new MongoClient
const client = new MongoClient(url, { useUnifiedTopology: true });
// Use connect method to connect to the Server
client.connect(function(err, client) {
assert.equal(null, err);
console.log("Connected correctly to server");
const db = client.db(dbName);
simplePipeline(db, function() {
client.close();
});
});
function simplePipeline(db, callback) {
const collection = db.collection('ADABTC');
collection.aggregate(
[
{ '$group': { 'Volume': { '$avg': 'Array.Volume' } } }
],
function(err, cursor) {
assert.equal(err, null);
cursor.toArray(function(err, documents) {
console.log(documents)
callback(documents);
});
}
);
}
答案 0 :(得分:1)
您的$group
语法是错误的:
按照指定的_id表达式对输入文档进行分组,并针对每个不同的分组输出文档。
$group
阶段必须指定一个_id
字段。将整个集合分组,只需在其中放置任何常量即可。
{
'$group': {
_id: null,
'Volume': {
'$avg': '$Array.Volume'
}
}
}