MongoDB - OR功能有很多条件

时间:2015-10-30 10:56:00

标签: java mongodb mongodb-query

当我在$或函数中使用大量条件进行MongoDB查询时,我遇到了一种奇怪的行为。

基本上发生的事情是100个结果在DBCursor中瞬间循环,并且以下5000个结果在2分钟后循环!

这是代码(进行查询的方法):

public Object getMongoData(String aDbName, String aCollectionName, DBObject aQueryObj, DBObject aSortObj, boolean aFindOne,
  DBObject aFieldsFilter, int aLimitStartPosition, int aLimitNumberResults, boolean aCreateIndex) throws Exception
  {
    // String aDbName MY_DB
    // String aCollectionName = MY_COLLECTION
    // DBObject aQueryObj = {"$or":[{"_id":"id1"},…,{"_id":"id5000"}]}
    // DBObject aSortObj = null
    // boolean aFindOne = false
    // DBObject aFieldsFilter = null
    // int aLimitStartPosition = 0
    // int aLimitNumberResults = 0
    // boolean aCreateIndex = false

    Object resultObj = null;
    DBObject query;
    DBObject filter;

    if (aQueryObj == null)
    {
      query = new BasicDBObject();
    }
    else
    {
      query = aQueryObj;
    }

    if (aFieldsFilter == null)
    {
      filter = new BasicDBObject();
    }
    else
    {
      filter = aFieldsFilter;
    }

    DBCollection collection = loadCollection(aDbName, aCollectionName);
    if (collection != null)
    {
      if (aFindOne)
      {
        resultObj = collection.findOne(query, filter);
      }
      else
      {
        if ((aSortObj != null) && !aSortObj.keySet().isEmpty())
        {
          if (aCreateIndex)
          {
            collection.createIndex(aSortObj);
          }

          resultObj = collection.find(query, filter).skip(aLimitStartPosition).limit(aLimitNumberResults).sort(aSortObj);
        }
        else
        {
          resultObj = collection.find(query, filter).skip(aLimitStartPosition).limit(aLimitNumberResults);
        }
      }
    }

    return resultObj;
  }

代码(调用以前方法并循环结果的代码):

dbCursor = (DBCursor) getMongoData(super.getMainDatabaseName(), aCollectionName, aQueryObj, aSortObj, false, aFilterObj);
      if (dbCursor != null)
      {
        int i = 0;

        while (dbCursor.hasNext())
        {
          DBObject dbObject = dbCursor.next();

          logger.debug("SEARCH FINISHED COUNT: " + dbCursor.count() + "\t CURRENT: " + i);
          i++;
        }
      }

知道为什么会这样吗?

谢谢

1 个答案:

答案 0 :(得分:0)

由于 $或功能仅按一个参数查询( _id ),我开始使用 $ in 并解决问题

https://docs.mongodb.org/manual/reference/operator/query/in/

enter image description here