本手册下载

9.3使用数据集

获取数据项的操作返回数据集,而修改数据并返回结果集的操作则相反。可以使用从数据库中读取数据项Collection.find ()Table.select ()Session.sql ().这三个方法都返回封装数据项的数据集。Collection.find ()返回带有文档和的数据集Table.select ()分别Session.sql ()返回一个包含行的数据集。

所有数据集实现了对其数据项进行迭代的统一方式。统一的语法支持逐个获取条目fetchOne ()或检索所有条目的列表fetchAll ()fetchOne ()fetchAll ()遵循只向前迭代语义。实现X DevAPI的连接器可以提供更高级的迭代模式,以匹配常见的本地语言模式。

下面的示例展示了如何访问由Collection.find ()操作使用fetchOne ()循环遍历所有文档。

第一次呼唤fetchOne ()返回找到的第一个文档。所有后续调用都将内部数据项迭代器游标增加一个位置,并返回第二次调用时找到的项fetchOne ()如果有的话,返回找到的第二个文档。当读取最后一个数据项时fetchOne ()再次调用时,返回NULL值。这确保了所显示的基本while循环可用于所有实现X DevAPI的语言(如果该语言支持这样的实现)。

当使用fetchOne ()不可能将内部数据项游标重置为第一个数据项来重新开始读取数据项。一个数据项(这里是Document),它只使用过一次fetchOne ()可以被连接器丢弃。数据项的生命周期与数据集解耦。从Connector透视图中获取项目时,调用者将使用它们。这个例子假设测试模式已经存在。

MySQL Shell JavaScript代码

var myColl = db.getCollection('my_collection');var res = myColl。找到(名称:名称).bind('名称',' L %)。execute ();var医生;while (doc = res.fetchOne()){打印(doc);}

MySQL Shell Python代码

myColl = db.get_collection('my_collection') res = myColl。找到(名称:名称)。bind('name','L%').execute() doc = res.fetch_one() while doc: print(doc) doc = res.fetch_one()

c#代码

var myColl = db.GetCollection(“my_collection”);var res = myColl。找到(“名称:名称”)。绑定(“名字”、“L %”). execute ();DbDoc医生;while ((doc = res.FetchOne()) != null) {Console.WriteLine(doc);}

Python代码

My_coll = db.get_collection('my_collection') res = My_coll。找到(名称:名称)。bind('name', 'L%').execute() doc = res.fetch_one() while doc: print(doc) doc = res.fetch_one()

Java代码

集合myColl = db.getCollection(“my_collection”);DocResult res = myColl。找到(“名称:名称”)。绑定(“名字”、“L %”). execute ();DbDoc医生;while ((doc = res.fetchOne()) != null) {System.out.println(doc);}

c++代码

集合myColl = db.getCollection(“my_collection”);DocResult res = myColl。找到(“名称:名称”)。绑定(“名字”、“L %”). execute ();DbDoc医生;while ((doc = res.fetchOne())) {cout << doc <

node . js JavaScript代码

var myColl = db.getCollection('my_collection');myColl。find('name like:name') .bind('name', 'L%') .execute() .then(res => {while (doc = res. fetchone ()) {console.log(doc);}});myColl。find('name like:name') .bind('name', 'L%') .execute(function (doc) {console.log(doc);});

当使用Node.js时,结果也可以返回回调函数,该函数被传递给execute ()当服务器的结果到达时,以异步的方式。

var myColl = db.getCollection('my_collection');myColl。find('name like:name') .bind('name', 'L%') .execute(function (doc) {console.log(doc);});

下面的示例展示了如何直接访问由Table.select ()操作。结果迭代的基本代码模式是相同的。以下示例与上一个示例的区别在于数据项处理。在这里,fetchOne ()返回的行。访问Row的列值的确切语法取决于语言。实现寻求提供一种语言本机访问模式。该示例假设测验模式存在,并且员工表存在其中myTable

MySQL Shell JavaScript代码

var myRows = myTable。选择([“名称”,“年龄”])。在哪里(名称:名称).bind('名称',' L %)。execute ();var行;while (row = myRows.fetchOne()){//通过数组打印('Name: ' + row[' Name '] + '\n');//通过动态属性print(' Age: ' + row;年龄+ ' \ n ');}

MySQL Shell Python代码

myRows = myTable。选择([“名称”,“年龄”])。where('name like:name').bind('name','L%').execute() row = myRows.fetch_one() while row: #通过数组访问字段print(' name: %s\n' % row[0]) #通过动态属性访问字段print('Age: %s\n' % row. Age) row = myRows.fetch_one()

node . js JavaScript代码

var myRows = myTable .select(['name', 'age']) .where('name like:name') .bind('name','L%') .execute(function (row){//连接器/Node.js还不支持通过其名称引用行列。//需要通过数组索引访问字段。console.log(“名称:”+行[0]);console.log(“Age:”+行[1]);});

或者,你可以使用回调函数:

myTable。select(['name', 'age']) .where('name like:name') .bind('name', 'L%') .execute() .then(myRows => {while (var row = myRows. fetchone()){//通过数组console.log('名称:' +行[0]+ '\n');console.log('Age: ' +行[1]+ '\n');}});

c#代码

var myRows = myTable。Select("name", "age") . where ("name like:name")。绑定(“名字”、“L %”). execute ();行一行;while ((row = myRows.FetchOne()) != null){//通过数组控制台访问字段。WriteLine("Name: " +行[0]);//通过名称Console访问字段。WriteLine("Age: " + row[" Age "]);}

Python代码

行= my_table。选择([“名称”,“年龄”])。where('name like:name').bind('name','L%').execute() row = rows.fetch_one() while row: #通过数组访问字段print(' name: {0}'.format(row[0])) #通过动态属性访问字段print('Age: {0}'.format(row[' Age ']) row = rows.fetch_one()

Java代码

RowResult myRows = myTable。选择("name, age") .where("name like:name")。绑定(“名字”、“L %”). execute ();行一行;while ((row = myRows.fetchOne()) != null){//访问字段System.out。println(" Age: " + row.getInt(" Age ") + "\n");}

c++代码

RowResult myRows = myTable。选择(“名字”,“年龄”)。(“名称:名称”).bind(“名字”、“L %”). execute ();行一行;while ((row = myRows.fetchOne())){//连接器/ c++还不支持通过它们的名称来引用行列。cout <<"Name: " << row[0] <(),否则操作符<()是不明确的bool uforty = row[age].get() < 40;//替代公式bool u40 = (int)row[age] < 40;}