最近学习MongoDB,研究官方文档java版本,以下是自己的理解(内容参考官方文档):
官方文档地址:[url]https://docs.mongodb.org/getting-started/java/query/[/url]
遍历一个collection有两种方法:
以document为单位遍历一个collection:
1、可用mongodb自带的遍历方式
这里用到了匿名内部类的方式。
2、用MongoCursor+iterater
两种方式主要依赖于find()方法。find()方法有许多可用参数。也能将bson当做一个参数传入以找到具体的bson对象。
查询:
1、在find中传入一个document对象参数以查询。用以上方式可以遍历。
例:
此行代码即可找到connection中所有以该key和value的bson对象。
2、也可利用mongodb中的static方法eq
例:
注意:
我用的eclipse保存时自动组织导入功能。使用该方法时并不会自动导入需要的包,此时需要自己手动import。引入语句:
import static com.mongodb.client.model.Filters.eq;
若还用有其余static方法。可将eq改成*。
在官方文档里面还有一种查询方式是类似
其中有个'.'操作符,经过试验猜测是当该bson对象的值也是一个document时,该document的key
3、
此操作用于找到集合中age属性大于24的document。不包含24;需要import import static com.mongodb.client.model.Filters.gt;
此操作与上句相同效果。无需import
注意此方式查询是传入一个document的第二个参数是一个document对象
如果对比属性是英文,则按照字典序查询。中文的未测试,待完善。。
lt方法表示属性值小于24的document。用法相同。
4、逻辑与
可以尽量详细的传入一个document对象,用于查询符合该document对象在collection里所有元素的值的document。
可以用static方法 and("","");在and参数里可以再填入两个filter,表示筛选同时满足两个filter的document。同样记得import 该and方法。
5、逻辑或
在此语句中在find方法里面传入一个document对象,第一个参数为"$or",表示执行或方法,第二个参数为一个list,将所有条件传入这个list里面。
相似的,也能用静态方法or表示筛选满足其中某个条件的document
官方文档地址:[url]https://docs.mongodb.org/getting-started/java/query/[/url]
遍历一个collection有两种方法:
以document为单位遍历一个collection:
1、可用mongodb自带的遍历方式
FindIterable inIterable = collection.find();
inIterable.forEach(new Block<Document>() {
@Override
public void apply(Document arg0) {
System.out.println(arg0);
}
});
这里用到了匿名内部类的方式。
2、用MongoCursor+iterater
MongoCursor cursor = collection.find().iterator();
System.out.println(collection.count());
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
cursor.close();
两种方式主要依赖于find()方法。find()方法有许多可用参数。也能将bson当做一个参数传入以找到具体的bson对象。
查询:
1、在find中传入一个document对象参数以查询。用以上方式可以遍历。
例:
collection.find(new Document(key,value));
此行代码即可找到connection中所有以该key和value的bson对象。
2、也可利用mongodb中的static方法eq
例:
connection.find(eq("name", "XXX"));
注意:
我用的eclipse保存时自动组织导入功能。使用该方法时并不会自动导入需要的包,此时需要自己手动import。引入语句:
import static com.mongodb.client.model.Filters.eq;
若还用有其余static方法。可将eq改成*。
在官方文档里面还有一种查询方式是类似
connection.find(eq("address.name", "XXX"));
其中有个'.'操作符,经过试验猜测是当该bson对象的值也是一个document时,该document的key
3、
collection.find(gt("age", 24));
此操作用于找到集合中age属性大于24的document。不包含24;需要import import static com.mongodb.client.model.Filters.gt;
collection.find(new Document("age",new Document("$gt",23)));
此操作与上句相同效果。无需import
注意此方式查询是传入一个document的第二个参数是一个document对象
如果对比属性是英文,则按照字典序查询。中文的未测试,待完善。。
collection.find(lt("age", 24));
lt方法表示属性值小于24的document。用法相同。
4、逻辑与
collection.find(
new Document("name", "XXX").append("age", "10086"));
可以尽量详细的传入一个document对象,用于查询符合该document对象在collection里所有元素的值的document。
collection.find(and(eq("name", "XXX"), eq("age", "10086"))
可以用static方法 and("","");在and参数里可以再填入两个filter,表示筛选同时满足两个filter的document。同样记得import 该and方法。
5、逻辑或
collection.find(new Document("$or", asList(new Document("name", "XXX"),new Document("age", "10086"))));
在此语句中在find方法里面传入一个document对象,第一个参数为"$or",表示执行或方法,第二个参数为一个list,将所有条件传入这个list里面。
collection.find(or(eq("name", "XXX"), eq("age", "10086")));
相似的,也能用静态方法or表示筛选满足其中某个条件的document