Reputation: 104
I have got a serverless db on atlas (https://www.mongodb.com/serverless). I used the connection string recommended by ATLAS:
mongodb+srv://<username>:<password>@xyz.esxbh.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
however as soon as i try to create a record, i get the following error:
{"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"MongoParseError: Text record must only set `authSource` or `replicaSet`","reason":{"errorType":"MongoParseError","errorMessage":"Text record must only set `authSource` or `replicaSet`","name":"MongoParseError","stack":["MongoParseError: Text record must only set `authSource` or `replicaSet`","
I don't think that the connection string is correct, on the other hand the dns entry for the server does reply with 2 servers.
I tried dropping the '+srv' part, however in that case the save function from mongoose just hangs forever timing out the lambda function.
I could not find any similar problem on google.
The TXT entry record from the dns server shows:
"TXT "authSource=admin&loadBalanced=true"
How have you configured the serverless database to work?
The code that generates the error depends on mongoose and is as follows:
try {
const customer = new Customer(cust);
console.log('new cusotmer created');
const returnedCustomer = await customer.save();
console.log(returnedCustomer);
return serverResponse(200, returnedCustomer);
} catch(err){
console.log(err);
return errorHandler(500, err)
}
It seems that the connection to the database is fine:
try {
await dbTools.connectMongoose();
console.log('*** connected ***');
} catch(err){
console.log('error when connecting');
return errorHandler(500, err);
}
Now, looking at the source code, nothing really too complicated:
if (Object.keys(record).some(key => key !== 'authSource' && key !== 'replicaSet')) {
return callback(
new MongoParseError('Text record must only set `authSource` or `replicaSet`')
);
}
I am now really struggling to understand what's wrong as authSource seems to be present in the TXT record.
Upvotes: 7
Views: 4511
Reputation: 109
If you are getting this error while using mongoimport or another item of mongodb-database-tools, then upgrade your tools to version 100.5.x or later
for mac: brew upgrade mongodb-database-tools
https://www.mongodb.com/docs/atlas/reference/serverless-instance-limitations/
https://www.mongodb.com/docs/database-tools/installation/installation-macos/
Upvotes: 0
Reputation: 593
For anyone still experiencing this in 2022, here is an answer from a MongoDB employee (at the bottom). It's a native Node.js driver issue (nothing to do with AWS lambda specifically), which will waterfall to all ODM implementations that implement the native driver.
https://www.mongodb.com/community/forums/t/atlas-serverless-and-dns-txt-record/117967/9
According to Zia Ullah's answer to this same question, this is fixed by Mongoose 6.0.5.
Upvotes: 1
Reputation: 323
Upgrading mongoose to the latest version worked for me in Nodejs.
Worked on 10-Sep-2021
Upvotes: 11