在MongoDB v3.4中,添加了views作为功能。但是,我无法找到任何资源,因为我如何使用我在Node.js应用程序中创建的视图。我将如何进行此操作,特别是对于聚合视图?
答案 0 :(得分:0)
我也发现这个不清楚。令人困惑的是,您需要使用db.createCollection,这与MongoDB shell中的createView
命令不同。例如:
db.createCollection('myView', {
viewOn: 'myCollection',
pipeline: [],
});
pipeline
是Aggregation Pipeline的位置。然后,您可以使用与集合相同的方式访问View:
db.collection('myView').find();
答案 1 :(得分:0)
我按照@dcr24 的描述设法做到了。完整代码如下
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
import DB_CONFIG from '../../server/constants/database'
/*
* Requires the MongoDB Node.js Driver
* https://mongodb.github.io/node-mongodb-native
*/
const agg = [
{
'$group': {
'_id': '$entityGroupId',
'totalVisits': {
'$sum': '$visits'
}
}
}, {
'$sort': {
'totalVisits': -1
}
}, {
'$lookup': {
'from': 'entities',
'localField': '_id',
'foreignField': 'entityGroupId',
'as': 'entityGroup'
}
}
];
MongoClient.connect(
DB_CONFIG.URL,
{useNewUrlParser: true, useUnifiedTopology: true},
async function (connectErr, client) {
assert.equal(null, connectErr);
const db = client.db('weally');
// db.createView("entityGroupByVisits", 'complaintvisitcounts', agg)
await db.createCollection('entityGroupByVisits', {
viewOn: 'complaintvisitcounts',
pipeline: agg,
});
client.close();
});