Java 查找状态为a、b或c且其数组大于0的MongoDB记录

Java 查找状态为a、b或c且其数组大于0的MongoDB记录,java,mongodb,Java,Mongodb,我正在努力为其中一个条件建立查询,我有这样一个文档: [ { "status": "a" }, { "status": "b" }, { "status": "foo" }, { "status": "a", "flightDetails": [ { "test": "xyz" } ] } ] BasicDBObject inQuery = new BasicDBObject

我正在努力为其中一个条件建立查询,我有这样一个文档:

[
 {
    "status": "a"
 },
 {
    "status": "b"
 },
 {
    "status": "foo"
 },
 {
    "status": "a",
    "flightDetails": [
        {
            "test": "xyz"
        }
    ]
 }
]
BasicDBObject inQuery = new BasicDBObject();
inQuery.append("status", new BasicDBObject("$nin", Arrays.asList("a", "b", "c")));

BasicDBObject inQuery2 = new BasicDBObject();
inQuery2.append("$where", "return Object.keys( this.flightDetails").length > 0");

BasicDBList criteria = new BasicDBList();
criteria.add(inQuery);
criteria.add(inQuery2);

BasicDBObject finalQuery = new BasicDBObject("$or",criteria);
我的选择标准如下:

[
 {
    "status": "a"
 },
 {
    "status": "b"
 },
 {
    "status": "foo"
 },
 {
    "status": "a",
    "flightDetails": [
        {
            "test": "xyz"
        }
    ]
 }
]
BasicDBObject inQuery = new BasicDBObject();
inQuery.append("status", new BasicDBObject("$nin", Arrays.asList("a", "b", "c")));

BasicDBObject inQuery2 = new BasicDBObject();
inQuery2.append("$where", "return Object.keys( this.flightDetails").length > 0");

BasicDBList criteria = new BasicDBList();
criteria.add(inQuery);
criteria.add(inQuery2);

BasicDBObject finalQuery = new BasicDBObject("$or",criteria);
  • 获取状态为
    a
    b
    c
    的所有数据,或
  • 获取状态为
    a
    b
    c
    flightDetails
    且大小大于0的所有数据
  • 并非所有文档都包含
    flightDetails
我尝试了如下java代码:

[
 {
    "status": "a"
 },
 {
    "status": "b"
 },
 {
    "status": "foo"
 },
 {
    "status": "a",
    "flightDetails": [
        {
            "test": "xyz"
        }
    ]
 }
]
BasicDBObject inQuery = new BasicDBObject();
inQuery.append("status", new BasicDBObject("$nin", Arrays.asList("a", "b", "c")));

BasicDBObject inQuery2 = new BasicDBObject();
inQuery2.append("$where", "return Object.keys( this.flightDetails").length > 0");

BasicDBList criteria = new BasicDBList();
criteria.add(inQuery);
criteria.add(inQuery2);

BasicDBObject finalQuery = new BasicDBObject("$or",criteria);

但它返回所有数据,似乎我的查询不正确。我搜索了很多,根据一些答案,我试图建立一个查询。有人能帮我吗?因为我是NoSQL和MongoDB的初学者,几天前开始学习。

对数组的“0”元素使用点表示法意味着它有一些内容,当然也存在:

BasicDBObject query = BasicDBObject("status", 
    new BasicDBObject("$in", Arrays.asList("a", "b", "c"))
)
    .append("flightDetails.0",
      new BasicDBObject("$exists",true)
    );
即:

{
    "status": { "$in": [ "a","b","c" ] },
    "flightDetails.0": { "$exists": true }
}
对于那些使用JSON符号的人

要合并“根本没有数组”,只需构造
$或
条件:

{
    "status": { "$in": [ "a","b","c" ] },
    "$or": [
        { "flightDetails.0": { "$exists": true } },
        { "flightDetails": { "$exists": false } }
    ]
}
或者对于Java:

BasicDBObject query = BasicDBObject("status", 
    new BasicDBObject("$in", Arrays.asList("a", "b", "c"))
)
    .append("$or",Arrays.<Object>asList(
        new BasicDBObject("flightDetails.0",
            new BasicDBObject("$exists",true)
        ),
        new BasicDBObject("flightDetails",
            new BasicDBObject("$exists",false)
        )
    ));
BasicDBObject查询=BasicDBObject(“状态”,
新的BasicDBObject(“$in”,Arrays.asList(“a”、“b”、“c”))
)
.append(“$or”,Arrays.asList)(
新的BasicDBObject(“flightDetails.0”,
新的BasicDBObject(“$exists”,true)
),
新的BasicDBObject(“flightDetails”,
新的BasicDBObject(“$exists”,false)
)
));
谢谢你的帮助:)我会查一下。