如何使用mongoDB java驱动程序在numberLong字段中查询mongoDB?
我根据这篇SO帖子尝试了这个:Java Mongodb numberlong query但它不起作用。
Query query= new Query();
query.addCriteria(Criteria.where("time").is("NumberLong("+article.getDate()+")"));
我也试过这个,其中article.getDate()的返回类型为Long,但它不起作用:
query.addCriteria(Criteria.where("time").is(article.getDate()));
java驱动程序中没有new NumberLong
对象可供使用。
https://docs.mongodb.org/manual/core/shell-types/建议使用NumberLong()包装器,但它仅适用于javascript shell,而不适用于java。
答案 0 :(得分:0)
MongoClient client = new MongoClient();
MongoDatabase mongoDb = client.getDatabase("test");
MongoCollection<Document> mongoCollection = mongoDb
.getCollection("numberFormatTest");
mongoCollection.drop();
Document smith = new Document("name", "Smith").append("age", 30)
.append("profession", "Programmer")
.append("phoneNo", "9848022338");
Document jones = new Document("name", "Jones").append("age", 30)
.append("profession", "Hacker")
.append("phoneNo", "9000000000000");
printJson(smith);
printJson(jones);
// mongoCollection.insertMany(asList(smith,jones));
System.out.println("Phone number: "
+ Long.valueOf(smith.getString("phoneNo")).longValue());
上面的代码可能适合您。目前,我尝试使用find,但它也适用于更新。
即使在您共享的上述链接中,NumberLong包装器也将字段值保存为字符串数据类型而不是long数据类型。以下陈述证明了这一点。
“NumberLong()包装器接受long作为字符串:”
答案 1 :(得分:0)
我认为这只是我在这种情况下的疏忽。这里的查询实际上有效:
query.addCriteria(Criteria.where("time").is(article.getDate()));
我把我的对象字段称为&#34; date&#34;而不是&#34;时间&#34;遇到它时,我查询时没有被接收。如下更改它使其正常工作。
query.addCriteria(Criteria.where("date").is(article.getDate()));