将 MongoDB 视图合并到 Node 中

Posted

技术标签:

【中文标题】将 MongoDB 视图合并到 Node 中【英文标题】:Incorporating MongoDB views into Node 【发布时间】:2018-08-23 03:56:50 【问题描述】:

在 MongoDB v3.4 中,views 被添加为一项功能。但是,我无法找到任何资源来说明如何使用在 Node.js 应用程序中创建的视图。我该怎么做,特别是对于聚合视图?

【问题讨论】:

所以您通过 Node.js 应用程序创建了一个视图,并且您想通过该应用程序访问该视图? 【参考方案1】:

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

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

其中pipeline 是Aggregation Pipeline。然后,您可以像访问集合一样访问您的视图:

db.collection('myView').find();

【讨论】:

【参考方案2】:

我设法按照@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();
    );

【讨论】:

以上是关于将 MongoDB 视图合并到 Node 中的主要内容,如果未能解决你的问题,请参考以下文章

node - MongoDB数据库

连接到 MongoDb Atlas 服务器时出错

使用node+express+mongodb实现用户注册登录和验证功能

MongoDB:将来自多个集合的数据合并为一个..如何?

将来自 2 个 mongoDB 集合的数据合并到 1 个文档中

将数组合并到对象到 MongoDB