0

如何使用 mongoDB java 驱动程序在 mongoDB 中查询 numberLong 字段?

我根据这个 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()));

new NumberLongJava 驱动程序中没有要使用的对象。

https://docs.mongodb.org/manual/core/shell-types/建议使用 NumberLong() 包装器,但它仅适用于 javascript shell,不适用于 java。

4

2 回答 2

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 包装器也将字段值保存为字符串数据类型而不是长数据类型。下面的陈述证明了这一点。

“NumberLong() 包装器接受 long 作为字符串:”

于 2015-11-07T14:47:05.910 回答
0

我认为这只是我在这种情况下的疏忽。这里的查询实际上有效:

 query.addCriteria(Criteria.where("time").is(article.getDate()));

我将我的对象字段称为“日期”而不是“时间”,当我查询时它没有被拾取。如下更改它使其正常工作。

 query.addCriteria(Criteria.where("date").is(article.getDate()));
于 2015-11-08T11:38:56.800 回答