如何用java表示以下查询(mongodb)

如何用java表示以下查询(mongodb),java,mongodb,Java,Mongodb,我在MongoDB中有一个JSON,其结构如下: { id:"_234234", "stationId":"ALM", "storageData": { } } 要检索storageData等于null的JSON,请在MongoDB中查询如下: db.collection.find({"storageData":{"$gt" : {}}}) 它给了我一个JSON主体的列表,其中包含空的storageData。那么,我如何用Java表示这一点呢 BasicDB

我在MongoDB中有一个JSON,其结构如下:

{
    id:"_234234",
    "stationId":"ALM",
    "storageData": {

    }
}
要检索
storageData
等于
null
的JSON,请在MongoDB中查询如下:

db.collection.find({"storageData":{"$gt" : {}}})
它给了我一个JSON主体的列表,其中包含空的
storageData
。那么,我如何用Java表示这一点呢

BasicDBObject obj=new BasicDDBObject("storageData", new BasicDBObject("$gt",{}));
collection.find(obj);
我在
BasicDBObject(“$gt”,{}”)附近收到一个错误…


如何在Java中表示
(“$gt”,{})

首先要理解null是一个有效值。这将是有效的:

{
    id:"_234234",
    StationId:"ALM",
    StorageData: null 
}
检索文档时,如果请求storagedata为null,则将检索id为_234234的文档

如果您需要检查哪些文档没有键“storagedata”,则使用$exist关键字或以以下方式构造查询:

db.yourcollection.find("this.storagedata == null")

我会通过查询来完成,而不是用Java,因为这会减少cpu时间和内存。

这里您只想表示一个空对象:

BasicDBObject query = new BasicDBObject(
    "storageData", new BasicDBObject(
        "$gt",new BasicDBObject()
     )
);
这当然会产生查询:

{ "storageData" : { "$gt" : { } } }

就是这样,只需调用
BasicDBObject
,不带任何参数。

我想检查包含storagedata key但里面没有值的文档。这里storagedata是一个子文档。问题非常具体,您只是误解了它。您也不应该以演示的方式使用JavaScript构造进行测试,因为它将无限制地扫描整个集合或索引。OP所示的查询可以与索引绑定。您可能认为它非常具体。毕竟,你自己写的,但是考虑你的句子:用StasaGeDATA等于NULL检索JSON,在MangGDB中查询为:db .Copy.find({ SturaGeDATA):{$$GT:{}}}