2015-04-07 77 views
0

這裏查詢是我的MongoDB的樣本文件:的MongoDB與Java API

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") 
}] 
,... 
} 

我的查詢是這樣的:

db.user.find({transaction:{$elemMatch:{prod:'a', purchasedAt:ISODate("2015-02-01")}}, transaction:{$elemMatch:{prod:{$nin:['b','c']}, purchasedAt:ISODate("2015-02-01")}}}).count() 

我試圖獲取用戶數誰購買產品的一個'on date「2015-02-01」但在同一天沒有購買產品b & c。

所以嘗試與查詢做到這一點在Java中:

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))); 

我也曾嘗試:

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))); 

其中Date是 「2015年2月1日」 在util.Date對象。

我發現Java的忽略查詢$in部分,即它忽略{transaction:{$elemMatch:{prod:'a', purchasedAt:ISODate("2015-02-01")}} &僅進行$nin一部分。

我通過DBCursor對象找到它。

這裏的光標在輸出:

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 

正因爲如此我的結果是不準確的。我想知道爲什麼完全相同的查詢在Mongo shell中運行良好,但不適用於Java API。我的查詢結構有什麼問題嗎?

+1

你應該可以在'BasicDBObject'上使用'toString()'來查看它生成的查詢。當然,它忽略了第一部分,因爲這是一個'Map',並且你使用'transaction'鍵兩次。雖然第二個壓倒了第一個。 –

+0

'toString()'輸出也與遊標對象相同。 'Query:{「transaction」:{「$ elemMatch」:{「prod」:{「$ nin」:[「b」,「c」]},「purchasedAt」:{「$ date」:「2015-02 -01T00:00:00.000Z「}}}}' – harshad

+0

請參閱我的評論的第二部分:'BasicDBObject'是一個'Map'。 –

回答

0

我的猜測是這個問題現在沒有意義,但是,如果你仍然不認爲它的答案,你是否在尋找「$ not」操作符,它可以檢查是否存在不存在的類型。