Docs 菜单
Docs 主页
/
MongoDB Shell
/

脚本注意事项

在此页面上

  • 构造函数
  • 生成器函数
  • 数组排序
  • JavaScript Setter

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

  • 类构造函数

  • 非异步生成器函数

  • 回调数组上的 .sort()

  • 类中的 JavaScript setter

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

以下构造函数不起作用:

// This code will fail
class FindResults {
constructor() {
this.value = db.students.find();
}
}
// This code will fail
function 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 fail
function* FindResults() {
yield db.students.findOne();
}
// This code will fail
function 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 fail
db.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 fail
class TestClass {
value = 1;
get property() {
return this.value;
}
// does not work:
set property(value) {
this.value = db.test.findOne({ value });
}
}

后退

代码范围