2012-04-25 60 views
1

這是我插入的數據。mongodb使用java驅動程序比較兩個不同的字段

{"_id" : ObjectId("4f97ebb5429c822f0506d9d8"), "direction" : "out", "status" : "complete", "inputfile" : "data", "messageid" :"mid_1","previousmessageid" : "previd_1"} 
{"_id" : ObjectId("4f97ebb5429c822f0506d9d8"), "direction" : "in", "status" : "complete", "inputfile" : "data1", "messageid" :"0","previousmessageid" : "mid_1"} 

現在我要查詢數據庫,找到匹配與方向的第一條記錄爲messageid記錄「中」,並在第二個記錄與方向「出」 previousmessageid。 我有一個巨大的數據量。一定建議我一個最好的方法獲取記錄。 在此先感謝。

回答

0

做將是使兩個查詢的最簡單的事情:

  1. 查詢,爲「第一條記錄」,根據你想找到該記錄任何標準。
  2. 一旦你有「第一條記錄」,你可以使用它的messageiddirection「out」找到第二組記錄。

下面是一個使用MongoDB的外殼爲例,儘管你可以將這個相當平凡到任何語言:

> var firstRecord = db.collection.findOne({direction: "in", /* other criteria */}) 
> var cursor = db.collection.find({previousmessageid: firstRecord["messageid"], direction: "out"}) 

這將是有效的假設你有一個索引服務第一查詢和索引在{previousmessageid: 1, direction: 1}

編輯:既然你是在處理與「中」方向的多條記錄,你可以稍微調整這種技術的工作:

> var inRecords = db.collection.find({direction: "in", /* other critiera */}) 
> var messageIds = [] 
> inRecords.forEach(function (record) { messageIds[messageIds.length] = record.messageid }) 
> var cursor = db.collection.find({direction: "out", previousmessageid: {$in: messageIds}}) 
> cursor.sort({previousmessageid: 1}) 
> /* do something with cursor */ 

然後,您可以處理的全套回覆所有的留言在你的應用程序。

+0

對不起,我忘記說在記錄插入我有兩個字段從日期和date.For查詢數據庫我只得到和從用戶的日期。在這種情況下,如果我得到messageid,然後查詢數據庫再次會影響性能,或者它會更好,如果我只是得到兩個數組中的記錄,然後匹配它們。建議性能最好的一個interms。如果有更好的方法,請分享它。提前感謝 – vikasse 2012-04-26 05:51:11

+0

基於從開始日期至今,您是否檢索一個或多個帶有「in」方向的記錄? – dcrosta 2012-04-27 16:09:53

+0

方向爲「in」的多條記錄,然後我必須將「in」中的messageid字段與「out」中的前一個messageid字段進行比較 – vikasse 2012-04-28 04:14:17

相關問題