简体   繁体   English

Java MongoDB 查询,插入 2 个“$or”条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM