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
且大小大于0的所有数据flightDetails
- 并非所有文档都包含
键flightDetails
[
{
"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)
)
));
谢谢你的帮助:)我会查一下。