1

我们有一个文档数据库的分片集群,托管在 AWS 上并使用 mongo db 版本 3.6,我们希望在 node.js 代码中实现一个 collection.watch() 函数来获取更改流,只要集合中有更改。当我连接在副本模式下运行的本地主机 mongodb 服务器时,它工作正常,我正在节点 js(客户端)中获取更改流,但是当我尝试连接到 AWS 上托管的文档 db 分片集群时,我得到了错误MongoError:不支持聚合阶段:'$changeStream'

我以复制模式连接了在 localhost 端口(27001 和 27002)上运行的本地 mongo db 服务器,它工作正常,但是在连接到 AWS 托管的文档数据库集群时,它给出了如上所述的错误。

这是我用来连接到文档数据库集群的代码。

//setting mongoose connection using below code, which is working fine

    const mongoose = require('mongoose');
    let dev_db_url = 'mongodb://<userName>:<Password>@X.X.X.X:27001,X.X.X.X:27002/testDb?replicaSet=rs0&ssl=true';

    const mongoDB = process.env.MONGODB_URI || dev_db_url;
    mongoose.connect(mongoDB,{ useNewUrlParser: true });
    mongoose.Promise = global.Promise;
    const db = mongoose.connection;

建立连接后,我使用下面的代码来实现 watch 函数来查找 changeStream。

db.once('open', () => {
    console.log('::::::::::::::::::::Server Connected::::::::::::::::::::');
    const productCollection = db.collection('myCollectionName');
    const changeStream = productCollection.watch();
    changeStream.on('change', (change) => {
        console.log(change);      
    });
  });

我在下面的行中遇到的确切错误

 changeStream.on('change', (change) => {
        console.log(change);      
    });

错误是“MongoError:不支持聚合阶段:'$changeStream'”

确切的错误堆栈跟踪:

    ::::::::::::::::::::Server Connected::::::::::::::::::::
    C:\Users\change_stream\node_modules\mongodb\lib\utils.js:132
          throw err;
          ^

    MongoError: Aggregation stage not supported: '$changeStream'
        at Connection.<anonymous> (C:\Users\change_stream\node_modules\mongodb-core\lib\connection\pool.js:443:61)
        at Connection.emit (events.js:198:13)
        at processMessage (C:\Users\change_stream\node_modules\mongodb-core\lib\connection\connection.js:364:10)
        at TLSSocket.<anonymous> (C:\Users\change_stream\node_modules\mongodb-core\lib\connection\connection.js:533:15)
        at TLSSocket.emit (events.js:198:13)
        at addChunk (_stream_readable.js:288:12)
        at readableAddChunk (_stream_readable.js:269:11)
        at TLSSocket.Readable.push (_stream_readable.js:224:10)
        at TLSWrap.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
    Emitted 'error' event at:
        at processNewChange (C:\Users\change_stream\node_modules\mongodb\lib\change_stream.js:436:43)
        at Cursor.<anonymous> (C:\Users\change_stream\node_modules\mongodb\lib\change_stream.js:272:5)
        at Cursor.emit (events.js:198:13)
        at next (C:\Users\change_stream\node_modules\mongodb\lib\cursor.js:1018:14)
        at err (C:\Users\change_stream\node_modules\mongodb\lib\utils.js:411:14)    at executeCallback (C:\Users\change_stream\node_modules\mongodb\lib\utils.js:401:25)
        at handleCallback (C:\Users\change_stream\node_modules\mongodb\lib\utils.js:128:55)
        at cursor._next (C:\Users\change_stream\node_modules\mongodb\lib\operations\cursor_ops.js:194:21)
        at queryCallback (C:\Users\change_stream\node_modules\mongodb-core\lib\cursor.js:662:23)
        at C:\Users\change_stream\node_modules\mongodb-core\lib\connection\pool.js:397:18
        at process._tickCallback (internal/process/next_tick.js:61:11)

我的问题在这里,有人见过这种错误吗?错误的可能根本原因应该是什么?我可以在 mongodb 集群端验证一些东西,这可以帮助纠正这个错误。我期望 changeStream 打印在 console.log(change) 中,而不是打印它会抛出这个错误。

任何帮助将不胜感激。

谢谢!

4

1 回答 1

1

看起来 DocumentDB 不支持 ChangeStreams。

请参阅此处的“查询和写入操作”部分:https ://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis-database.html

于 2019-07-24T23:09:29.007 回答