在MongoDB Atlas触发器函数中从集合提取字段存为字符串变量
问题原因
- MongoDB Atlas 函数中所有数据库操作都是异步方法,你没有加
await等待执行完成,拿到的只是待执行的 Promise 对象,不是实际查询结果 find()方法返回的是查询游标,不是直接的结果数组,按唯一_id查询单条文档更适合用findOne()方法
正确实现代码
exports = async function() { const mongodb = context.services.get("mongodb-atlas"); const EventData = mongodb.db("SIoT").collection("EventData"); // await 等待异步查询完成,直接拿到单条文档 const targetDoc = await EventData.findOne({"_id": new BSON.ObjectId("XXXXXXXX")}); // 容错处理,避免查询不到文档时报错 if (!targetDoc) { console.log("未匹配到对应_id的文档"); return; } // 直接提取字段保存为变量,后续可直接用于调用第三方API const codeRequestAuth = targetDoc.CodeRequestAuthorization; // 测试打印验证值是否正确 console.log("CodeRequestAuthorization 值:", codeRequestAuth); // 按需返回结果或执行后续逻辑 return codeRequestAuth; };
如果你坚持用find()方法的写法
需要调用toArray()将游标转为结果数组,再取下标为0的元素:
exports = async function() { const mongodb = context.services.get("mongodb-atlas"); const EventData = mongodb.db("SIoT").collection("EventData"); const dataArr = await EventData.find({"_id": new BSON.ObjectId("XXXXXXXX")}).toArray(); if (dataArr.length === 0) { console.log("未匹配到对应_id的文档"); return; } const codeRequestAuth = dataArr[0].CodeRequestAuthorization; return codeRequestAuth; };
内容的提问来源于stack exchange,提问作者Patrick McGuckian
相关产品推荐
相关产品推荐

