[英]How can I combine two queries or search for different fields using MongoDB's Java driver
[英]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”。 我有大量的数据。建议我最好的方法来获取记录。 提前致谢。
最简单的操作是进行两个查询:
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.