文档菜单
文档首页
/
MongoDB Shell
/

脚本注意事项

本页内容

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

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

  • 类构造函数

  • 非异步生成器函数

  • 回调函数.sort() 对数组进行排序

  • 类中的 JavaScript 设置器

要访问数据库调用的结果,请使用异步函数异步生成器函数,或者 .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 设置器不工作

// 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 });
}
}

返回

代码作用域