对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

脚本注意事项

数据库查询的结果不能在以下上下文中传递:

  • 类构造函数

  • 非异步生成器函数

  • 回调数组上的 .sort()

  • 类中的 JavaScript setter

要访问数据库调用的结果,请使用异步函数、异步生成器函数 或 .map()。

以下构造函数不起作用:

// This code will failclass FindResults { constructor() { this.value = db.students.find(); }} // This code will failfunction listEntries() { return db.students.find(); }class FindResults { constructor() { this.value = listEntries(); }}

改用 async 函数:

class FindResults { constructor() { this.value = ( async() => { return db.students.find(); } )(); }}

注意

还可以创建一个在类中执行数据库操作的方法,作为使用异步 JavaScript 的替代方法。

class FindResults { constructor() { } init() { this.value = db.students.find(); } }

要使用此类,请首先构造一个类实例,然后调用 .init() 方法。

以下生成器函数不起作用:

// This code will failfunction* FindResults() { yield db.students.findOne();} // This code will failfunction listEntries() { return db.students.findOne(); }function* findResults() { yield listEntries();}

改用 async generator function:

function listEntries() { return db.students.findOne(); }async function* findResults() { yield listEntries();}

以下数组排序不起作用:

// This code will faildb.getCollectionNames().sort( ( collectionOne, collectionTwo ) => { return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() )} );

改用 .map()。

db.getCollectionNames().map( collectionName => { return { collectionName, size: db[ collectionName ].estimatedDocumentCount() };} ).sort( ( collectionOne, collectionTwo ) => { return collectionOne.size - collectionTwo.size;} ).map( collection => collection.collectionName);

这种数组排序方法通常比不支持的等效代码性能更高。

以下 JavaScript setter 不起作用:

// This code will failclass TestClass { value = 1; get property() { return this.value; } // does not work: set property(value) { this.value = db.test.findOne({ value }); }}