[英]Java MongoDB queries, inserting 2 '$or' conditions
I am trying to generate a MongoDB query with Java like the following:我正在尝试使用 Java 生成一个 MongoDB 查询,如下所示:
{
"$or": [
{
"user": {
"$exists": true
}
},
{
"parent": {
"$exists":true
}
}
],
"working": 1,
"$or": [
{
"car.id": 3846,
"car.mediaType": 1
},
{
"car.matched.id": 3846,
"car.matched.model": 1
}
]
}
But I cannot do it because when the second $or
condition is being added, the first one is overwritten.但我不能这样做,因为当添加第二个$or
条件时,第一个被覆盖。
I need to search with some of the results of each $or
, I can't add it in the same $or
.我需要搜索每个$or
一些结果,我不能将它添加到同一个$or
。 The code is:代码是:
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
public class Sample {
public function mongoSearch()
{
BasicDBObjectBuilder queryBuidlerType = BasicDBObjectBuilder.start().add("working", 1);
BasicDBObject user = new BasicDBObject("user", new BasicDBObject("$exists", true));
BasicDBObject parent = new BasicDBObject("parent", new BasicDBObject("$exists", true));
BasicDBObject car = new BasicDBObject();
parentMatch.put("car.id", mId);
parentMatch.put("car.model", mModel);
BasicDBObject carMatched = new BasicDBObject();
parentMatch.put("car.matched.id", mId);
parentMatch.put("car.matched.model", mModel);
BasicDBList or1 = new BasicDBList();
or.add(user);
or.add(parent);
BasicDBList or2 = new BasicDBList();
or.add(car);
or.add(carMatched);
queryBuidlerType.add("$or", or1).add("$or", or2);
DBObject queryType = queryBuidlerType.get();
}
}
You should use $and
wrapping both $or
:您应该使用$and
包装$or
:
{
"$and": [
{"$or": [
{
"user": {
"$exists": true
}
},
{
"parent": {
"$exists":true
}
}
]},
{"$or": [
{
"car.id": 3846,
"car.mediaType": 1
},
{
"car.matched.id": 3846,
"car.matched.model": 1
}
]}
],
"working": 1
}
And also, I don't know what you're trying to do, but if you want to match "car.id": 3846" AND "car.mediaType": 1 in the same sub-object, consider using `$elemMatch而且,我不知道您要做什么,但是如果您想在同一个子对象中匹配 "car.id": 3846" AND "car.mediaType": 1,请考虑使用 `$elemMatch
In Java :在 Java 中:
QueryBuilder queryBuidlerType = QueryBuilder.start("working").is(1);
DBObject or1 = QueryBuilder.start().or(QueryBuilder.start("user").exists(true).get(), QueryBuilder.start("parent").exists(true).get()).get();
DBObject or2 = QueryBuilder.start().or(QueryBuilder.start("car.id").is(mId).and("car.model").is("mModel").get(), QueryBuilder.start("car.matched.id").is(mId).and("car.matched.model").is("mModel").get()).get();
queryBuidlerType.and(or1, or2);
DBObject queryType = queryBuidlerType.get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.