Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mongodb中的复杂查询_Java_Mongodb - Fatal编程技术网

Java mongodb中的复杂查询

Java mongodb中的复杂查询,java,mongodb,Java,Mongodb,我想从java执行一个复杂的mongodb查询。我有四个字段userid,statusid,dateTO,和dateFrom。复杂的查询类似于(userid或statusid)和(dateFrom

我想从java执行一个复杂的mongodb查询。我有四个字段
userid
statusid
dateTO
,和
dateFrom
。复杂的查询类似于
(userid或statusid)和(dateFrom
。我现在有一个疑问:

DBObject query = new BasicDBObject();
    ArrayList orList = new ArrayList();
    ArrayList andList = new ArrayList();


    orList.add(new BasicDBObject("user.id", id));
    orList.add(new BasicDBObject("retweeted_status.user.id", id));

    andList.add(new BasicDBObject("date_posted", new BasicDBObject("$gt", dateFrom)));
    andList.add(new BasicDBObject("date_posted", new BasicDBObject("$lt", dataTo)));

    orList.add(new BasicDBObject("$and", andList));

    query = new BasicDBObject("$or", orList);
如何更改它以执行所需的查询?例如,当我试图向robomongo查询时,它看起来像:

db.coll.find({$and:[{ $or: [ {"user.id":414848505}, {"retweeted_status.user.id":414848505}] },{$and:[{"date_posted":{"$gt":1398948442000}},{"date_posted":{"$lt":1400111999000}}] } ]})

这是您想要的查询吗

{
    "$and": [
        {
            "$or": [
                {
                    "user.id" : <id>
                },
                {
                    "retweeted_status.user.id": <id>
                }
            ]
        },
        {
            "$and": [
                {
                    "date_posted": {
                        "$gt": <dateFrom>
                    }
                },
                {
                    "date_posted": {
                        "$lt": <dateFrom>
                    }
                }
            ]
        }
    ]
}
类内;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.data.mongodb.core.MongoTemplate;
导入org.springframework.data.mongodb.core.query.Criteria;
导入org.springframework.data.mongodb.core.query.query;
@自动连线(必需=真)
私有MongoTemplate MongoTemplate;
//里面有一些方法
List=null;
查询=新查询();
query.addCriteria(Criteria.where(“date_posted”).gt(dateFrom);//对于传递数据很重要的数据类型
query.addCriteria(Criteria.where(“date_posted”).lt(dateTo);//对于传递数据很重要的数据类型
query.addCriteria(Criteria.where(“retweetd_status.user.id”).orOperator(Criteria.where(“retweetd_status.user.id”)).is(id));//数据类型对传递数据很重要//示例:Integer.valueOf(id);
list=mongoTemplate.find(query,className.class);//输入文档类名

是的,这正是我想要的查询。你确定你的代码吗?它似乎工作不正常。我在查询数据库时没有得到预期的结果。Idk,代码生成的查询字符串与上面的查询相同。
final DBObject userId = new BasicDBObject("user.id", id);
final DBObject retweetedStatusUserId = new BasicDBObject("retweeted_status.user.id", id);
final DBObject or = new BasicDBObject("$or", Arrays.asList(userId, retweetedStatusUserId));

final DBObject greaterThan = new BasicDBObject("$gt", dateFrom);
final DBObject datePostedGreaterThan = new BasicDBObject("date_posted", greaterThan);
final DBObject lessThan = new BasicDBObject("$lt", dateTo);
final DBObject datePostedLessThan = new BasicDBObject("date_posted", lessThan);
final DBObject and = new BasicDBObject("$and", Arrays.asList(datePostedGreaterThan, datePostedLessThan));

final DBObject query = new BasicDBObject("$and", Arrays.asList(or, and));
inside class;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;



@Autowired(required = true)
private MongoTemplate mongoTemplate;

// inside some method

List<className> list=null;
            Query query=new Query();
            query.addCriteria(Criteria.where("date_posted").gt(dateFrom);//data type important for passing data 
            query.addCriteria(Criteria.where("date_posted").lt(dateTo);//data type important for passing data 
            query.addCriteria(Criteria.where("retweeted_status.user.id").orOperator(Criteria.where("retweeted_status.user.id")).is(id)); //data type important for passing data// example:Integer.valueOf(id);
            list=mongoTemplate.find(query, className.class);//put your document class name