MongoDb查询

最近学习MongoDB,研究官方文档java版本,以下是自己的理解(内容参考官方文档):
官方文档地址:[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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值