Search code examples
mongodbmongo-scala-driver

how to perform anding of oring in mongodb


my collection structure is as follows

{ name : "xyz" , priLoc :{ area : a , country : c } , secondLoc :
[ {area : b ,country : d},{area : b ,country : d} ]}

I want to make query that Oring the area both priLoc and secondLoc and anding the country both priLoc and secondLoc.

I have make query like below

  var query = new BasicDBObject()

   val areaObjList = new BasicDBList
    var primaryArea = new BasicDBObject("priLoc.area", areaList)
   var secondaryArea = new BasicDBObject("secondLoc.area",areaList)
   areaObjList.add(primaryArea)
   areaObjList.add(secondaryArea)
   query.put("$or", areaObjList)

   val countryObjList = new BasicDBList
   val primaryCountry = new BasicDBObject("priLoc.country",countryList)
   val secondaryCountry = new BasicDBObject("secondLoc.country",countryList)
   countryObjList.add(primaryCountry);
   countryObjList.add(secondaryCountry);
   query.put("$or", countryObjList)

but when this this code run areaObjList is replayed by countryObjList so at time only one or object present in query object

I want to make query which and both or object means areaObjList and countryObjList.

how do implement this . or I am making something wrong

if some one knows plz reply.

Thanks


Solution

  • MongoDB does not provide a generic query language as you might expect it from SQL. Basically all query expressions are combined using AND (implictely). You can use $or operator to combine an arbitrary number of expressions. But there is no generic for query something like

    (a and b) or (c and d) or not (x and y) etc....

    http://www.mongodb.org/display/DOCS/Advanced+Queries