获取数据项的操作返回数据集,而不是修改数据并返回结果集的操作。可以使用数据项从数据库中读取collection.find()
那table.select()
和session.sql()
。所有三种方法都返回封装数据项的数据集。collection.find()
返回带文档的数据集table.select()
分别session.sql()
返回带有行的数据集。
所有数据集都实现了迭代其数据项的统一方式。统一的语法支持一个逐个获取项目fetchone()
或使用所有项目的列表使用fetchall()
。fetchone()
和fetchall()
遵循仅前瞻性迭代语义。实现X Devapi的连接器可以在顶部提供更多高级迭代模式,以匹配常见的母语模式。
以下示例显示了如何访问由a返回的文件collection.find()
通过使用操作fetchone()
循环所有文档。
第一次打电话fetchone()
返回找到的第一个文档。所有后续调用按一个位置递增内部数据项迭代器光标,并返回找到第二个呼叫的项目fetchone()
如果有的话,返回找到的第二个文档。当读取最后一个数据项时fetchone()
再次调用null值返回。这可确保基本循环显示,如果语言支持这样的实现,则所有语言都适用于实现X devapi。
当使用fetchone()
不能将内部数据项游标重置为第一个数据项以再次开始读取数据项。一种数据项(这里是Document),它使用一次就被获取fetchone()
可以通过连接器丢弃。数据项的终生时间与数据集分离。从连接器透视项,呼叫者被获取时消耗。此示例假定存在测试模式。
var mycoll = db.getcollection('my_collection');var res = mycoll.find('姓名:name')。绑定('name','l%')。执行();var doc;while(doc = res.fetchone()){print(doc);}
以下示例显示了如何直接访问返回的行table.select()
手术。结果迭代的基本代码模式是相同的。以下与前一个示例之间的差异在于数据项处理。这里,fetchone()
返回行。访问行的列值的确切语法是依赖于语言。实现寻求提供一种语言本机访问模式。这个例子假定了测试
模式存在,其中存在员工表mytable.
。
var myrows = mytable.select([''name','年龄'])。其中('名称(如:name')。绑定('name','l%')。执行();var行;虽然(Row = myrows.fetchone()){//按阵列打印访问字段('name:'+行['name'] +'\ n');//按动态属性打印访问字段('年龄:'+ Row.age +'\ n');}