簡體   English   中英

mongodb使用Java驅動程序比較兩個不同的字段

[英]mongodb compare two different fields using java driver

這是我插入的數據。

{"_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匹配的記錄,其中第一條記錄的方向為“ in”,而先前的messageid與方向為“ out”。 我有大量的數據。建議我最好的方法來獲取記錄。 提前致謝。

最簡單的操作是進行兩個查詢:

  1. 根據您要查找該記錄的任何條件查詢“第一條記錄”。
  2. 一旦有了“第一條記錄”,就可以使用其messageid和“ out” direction查找第二組記錄。

這是一個使用MongoDB shell的示例,盡管您可以將其轉換為任何一種語言,但都可以:

> 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 */

然后,您可以處理對應用程序中所有消息的完整答復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM