将MongoDB视图合并到Node中

时间:2018-03-14 14:51:05

标签: node.js mongodb aggregation-framework mean-stack

在MongoDB v3.4中,添加了views作为功能。但是,我无法找到任何资源,因为我如何使用我在Node.js应用程序中创建的视图。我将如何进行此操作,特别是对于聚合视图?

2 个答案:

答案 0 :(得分:0)

我也发现这个不清楚。令人困惑的是,您需要使用db.createCollection,这与MongoDB shell中的createView命令不同。例如:

db.createCollection('myView', {
  viewOn: 'myCollection',
  pipeline: [],
});

pipelineAggregation 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();
    });