MongoDB 如何查询数组元素的下标
MongoDB通过 $slice 可以按照下标查出内嵌数组的元素,但是不能通过元素的值来查询下标。例如:数组中的元素是存放不同的颜色名称,MongoDB 可以根据数组下标来找颜色,但是不能通过颜色查找对应的下标。
比如:MongoDB 的集合 colors 中,保存了 name 和 color(数组), 数据如下:
colors | _id | name | color |
1 | page | [red,green,blue,white,mauve,black] | |
2 | card | [gray,ivory,mauve,lavender,white,black,yellow] |
MongoDB 可以查找指定排名的颜色,例如查找 white 的颜色:
db.colors.find({}, {color: {$slice: [3,4]}} ),
虽然能找到颜色 white 的记录,但由于没有提供对应的方法,不能找到 white 在数组中的下标。
使用集算器, 可用 pos() 函数定位数组元素的下标,非常方便。
集算器安装包可去润乾网站下载,运行时需要一个授权,免费版本就够用。
我们将上述描述事例实现步骤:
A | B | |
1 | =mongo_open("mongodb://127.0.0.1:27017/raqdb") | / 连接 MongDB 数据库 |
2 | =mongo_shell(A1,"colors.find()").fetch() | / 获取集合 colors 数据 |
3 | =A2.new(name:NAME, color.pos("white"):POS) | / 查询 white 在 color 中的下标 |
4 | >A1.close() | / 关闭连接 |
A3 | NAME | POS |
paper | 4 | |
card | 5 |
public static void doColor() {
Connection con = null;
java.sql.Statement st;
try{
Class.forName("com.esproc.jdbc.InternalDriver");
con = DriverManager.getConnection("jdbc:esproc:local://");
// 调用脚本 colors.dfx
st=con.createStatement();
ResultSet rst = st.executeQuery("call colors");
System.out.println(rst);
} catch(Exception e){
System.out.println(e);
} finally{
// 关闭连接
if (con!= null) {
try {
con.close();
} catch(Exception e) {
System.out.println(e);
}
}
}
}
如果想查出当前颜色在数组中所有的下标,可用 pos@a()返回,想了解更多 pos() 用法可参考:《集算器函数参考》。集算器与 JAVA 集成的进一步信息可参考:《Java 如何调用 SPL 脚本》。
英文版