MongoDB querying with Java API -
MongoDB querying with Java API -
here sample document of mongodb:
user:{ _id:1, name:'xyz', age:12, mobile:21321312, transaction:[{ trans_id:1, prod:'a', purchasedat:isodate("2015-02-01"), }, { trans_id:2, prod:'b', purchasedat:isodate("2015-02-01") }, { trans_id:3, prod:'c', purchasedat:isodate("2014-11-24") }] ,... }
my query looks like:
db.user.find({transaction:{$elemmatch:{prod:'a', purchasedat:isodate("2015-02-01")}}, transaction:{$elemmatch:{prod:{$nin:['b','c']}, purchasedat:isodate("2015-02-01")}}}).count()
i trying user count have purchased product 'a' on date "2015-02-01" not have purchased product b & c on same day.
so while trying in java query:
coll.find(new basicdbobject().append("transaction", new basicdbobject("$elemmatch", new basicdbobject("prod", 'a').append("purchasedat", date))).append("transaction", new basicdbobject("$elemmatch", new basicdbobject("prod", new basicdbobject("$nin",['b','c'])).append("purchasedat", date)));
i have tried:
coll.find(new basicdbobject("transaction", new basicdbobject("$elemmatch", new basicdbobject("prod", 'a').append("purchasedat", date))).append("transaction", new basicdbobject("$elemmatch", new basicdbobject("prod", new basicdbobject("$nin",['b','c'])).append("purchasedat", date)));
where date
"2015-02-01" in util.date
object.
i found out java ignores $in
part of query, i.e. ignores {transaction:{$elemmatch:{prod:'a', purchasedat:isodate("2015-02-01")}}
& performs $nin
part.
i found out dbcursor object.
here's output of cursor:
cursor: cursor id=0, ns=mydb.user, query={ "transaction" : { "$elemmatch" : { "prod" : { "$nin" : [ "b" , "c"]} , "purchasedat" : { "$date" : "2015-02-01t00:00:00.000z"}}}}, numiterated=0, readpreference=primary
because of result inaccurate. wonder why exact same query works in mongo shell doesn't java api. there wrong query structure?
java mongodb api mongodb-query
Comments
Post a Comment