我的MongoDB结构如下所示:
{
"_id" : NumberLong(1),
"_class" : "com.cts.adpart.domain.DBData",
"file" : "xyz",
"owner" : "user1",
"curList" : [
{
"approver" : "user2",
"reviewer" : "user3",
"country" : "India"
},
"curFlag" : true
},
{
"_id" : NumberLong(2),
"_class" : "com.cts.adpart.domain.DBData",
"file" : "xyz",
"owner" : "user2"
"curList" : [
{
"approver" : "user1",
"reviewer" : "user3",
"country" : "India"
},
"curFlag" : true
}
所有者名称将是用户名。
我必须以这样的方式实现搜索:if 1. curFlag是真的, 2.国家是印度 3.如果用户名在某个文档中列为审阅者或审批者,那么该结果也应该在搜索中
我尝试过以下方式:
DBCollection myColl = mongoTemplate.getCollection("User_Collection");
BasicDBObject query = new BasicDBObject("curFlag", true);
query.append("country","India")
DBObject approver = new BasicDBObject("curList.reviewer", Util.getOwner());
DBObject reviewer = new BasicDBObject("curList.approver", Util.getOwner());
BasicDBList or = new BasicDBList();
or.add(approver);
or.add(reviewer);
query.append("$or", or);
我在这里没有得到确切的结果。
上述查询的工作原理如果country是India并且curFlag为true且所有者名称列为批准者或审阅者,则列出该文档。
但是我想查询一下,如果country是India并且curFlag是true或者所有者名称被列为批准者或审阅者我应该列出该文档。
有人可以帮我解决这个问题吗。
答案 0 :(得分:0)
如果你这样做,
db.User_Collection.find({
$or: [{
"curList.country": "India",
"curFlag": true
}, {
$or: [{
"curList.approver": "user1"
}, {
"curList.reviewer": "user1"
}]
}]
}).pretty()
然后你的java代码应该是,
DBCollection myColl = mongoTemplate.getCollection("User_Collection");
BasicDBObject query = new BasicDBObject("curFlag", true);
query.append("country","India")
DBObject approver = new BasicDBObject("curList.reviewer", Util.getOwner());
DBObject reviewer = new BasicDBObject("curList.approver", Util.getOwner());
BasicDBList or = new BasicDBList();
or.add(approver);
or.add(reviewer);
query.append("$or", or);
BasicDBList orQueryList = new BasicDBList();
orQueryList.add(query);
orQueryList.add(or);
BasicDBObject fullQuery = new BasicDBObject("$or", orQueryList);
使用fullQuery对象查询集合中的数据。